我有一个nginx负载均衡器处理一些后端服务器的http web请求。由于一些遗留的原因,后端服务器不能更改,发出请求的客户端也不能更改。http请求包含参数。我有一组特殊字符(区分大小写)例如S = [“Q”,“A”,“B”,“C”],这些可以在特定参数中以任何顺序出现(让我们称之为“foo”)任何次数。我想用每个字符的特定预定义字符串替换每个字符。假设Q被替换为qx,A被替换为ay,B被bz替换,C被cz替换。举个例子
http:/localhost:5000/part?foo=QhelloAWorldBearthCLondon
字符串
这应转变为:
http://localhost:5000/part?foo=qxhelloayWorldbzearthczLondon.
型
有没有一种方法可以通过从nginx重写来做到这一点?我只想转换foo参数,而其他参数不变。尝试了递归方法,但在10次更新后被拒绝,因为nginx不允许超过10次。
1条答案
按热度按时间neskvpey1#
NginxMap可以级联,这意味着问题可以分解为可管理的部分。
没有一个解决方案会给你给予无限的转换次数,但是下面的解决方案是可扩展的,所以你可以设置一个合理的上限。
举例来说:
字符串
从底部开始,第五个map用
foo=y
替换foo=x
,而不改变任何其他参数(如果有的话)。这个map的值可以用来替换请求URL中的参数。在上面的例子中,我们使用rewrite.break。其他的Map每个都替换一个或多个单一模式的出现。在这个例子中,出现的最大数量是三个,但是可以很容易地扩展到任何合理的数量。
用于Map和捕获的所有变量名称都应该是唯一的,以避免无意中混淆值。应避免数字捕获,因为在下一个正则表达式求值时,值会丢失。