在proxy_pass位置类型下,“基本”重写规则存在一些问题:
location ~* /test1/network/v1/operator/ke3/dataUp {
rewrite ^(?<begin>/test1/network/v1/operator/ke3/dataUp)(?<parametersPart>.*)(?<mustDie>/dataUp)$ $parametersPart break;
proxy_pass http://server_preproduction;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header Host $host;
}
我希望有任何电话发送到:.../test1/network/v1/operator/ke3/dataUp?param1=GHJ¶m2=865/dataUp
等于:.../test1/network/v1/operator/ke3/dataUp?param1=GHJ¶m2=865
所以我只想解析参数部分,以便从原始请求中删除任何多余的/ dataUp。 但是当我尝试使用任何形式的正则表达式来执行此操作时,nginx似乎返回到位置/并使用默认请求...
我确定使用了正确的位置,因为当我使用类似rewrite ^(?<begin>/test1/network/v1/operator/ke3/dataUp)(?<parametersPart>.*)$ TEST$parametersPart break;
的重写时
代理服务器上的日志收到:TEST?param1 = GHJ&param2 = 865 / dataUp
我不想在proxy_pass的末尾添加/,因为我想替换所有网址。(但这不是强制性的!我尝试了很多组合...)
如果有人可以挽救我的一天,请:p
谢谢!!
答案 0 :(得分:0)
我找到了一种使用简单的if语句来操纵参数的方法...
if ($query_string ~ "^(?<argsok>/dataUp.*)(?<argsko>/dataUp)$") {
proxy_pass http://server_preproduction/$argsok;
}