Nginx-代理下的重写规则失败

时间:2019-06-19 14:50:49

标签: nginx nginx-location nginx-config

在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&param2=865/dataUp

等于:.../test1/network/v1/operator/ke3/dataUp?param1=GHJ&param2=865

所以我只想解析参数部分,以便从原始请求中删除任何多余的/ dataUp。 但是当我尝试使用任何形式的正则表达式来执行此操作时,nginx似乎返回到位置/并使用默认请求...

我确定使用了正确的位置,因为当我使用类似rewrite ^(?<begin>/test1/network/v1/operator/ke3/dataUp)(?<parametersPart>.*)$ TEST$parametersPart break;的重写时 代理服务器上的日志收到:TEST?param1 = GHJ&param2 = 865 / dataUp

我不想在proxy_pass的末尾添加/,因为我想替换所有网址。(但这不是强制性的!我尝试了很多组合...)

如果有人可以挽救我的一天,请:p

谢谢!!

1 个答案:

答案 0 :(得分:0)

我找到了一种使用简单的if语句来操纵参数的方法...

    if ($query_string ~ "^(?<argsok>/dataUp.*)(?<argsko>/dataUp)$") {
        proxy_pass http://server_preproduction/$argsok;
    }