nginx转发参数修改
由于业务的一些意外调整,我们可能都需要让nginx通过header或者args的变更来快速的实现后端服务的升级和切换。
现在需求是当某个api的请求url的参数含有redirect=true的时候,需要修改成redirect=false.
1 | if ( $arg_redirect = "true") { |
但是大家也看到了问题,这里只是在完成的参数又加了一个参数。 最终的url参数就变成了
1 | /api?redirect=true&redirect=false |
于是手动测试了一下,发现这样也可以生效。本着完整的测试,又测试了一下反着写的
1 | /api?redirect=false&redirect=true |
结果一样有效,查了下代码发现相同参数是放入到list中,然后取一个合集。所以只要这里有一个false,那结果就是false。但是哪天我要把false设置为true就不行了。
所以我们又改了一下nginx的相关参数
1 | if ($args ~* (.*)(redirect=false)(.*)) { |
这就完全满足了我们的需求了。不会出现相同参数出现2次的情况发生了。
顺便说一句,如果改header的话就用 proxy_set_header 就可以了,但是nginx里不支持在if里使用这个命令,怎么绕过取就看自己的了,一般用map什么的都可以。