【问题标题】:nginx reverse proxy locationnginx反向代理位置
【发布时间】:2020-03-05 04:21:41
【问题描述】:

我想按照以下规则将 nginx 设置为反向代理:

http://www.example.com/home/{x}/{y}//index.html?zvalue={z}&a=1&b=2&c=3 etc...

代理到

http://www.example2.com/home/{x}/{y}/{z}/index.html?a=1&b=2&c=3 etc...

所以基本上 {z} 的查询字符串值被设置为路径的一部分。 所有其他查询参数(如 a、b、c、d 等)都需要按照示例中所示进行转发。

我需要在 nginx 中进行哪些配置?

【问题讨论】:

    标签: nginx nginx-location nginx-reverse-proxy


    【解决方案1】:

    最好使用带有命名捕获的map 来操作查询字符串。详情请见this document

    例如:

    map $request_uri $proxy {
        default 0;
        ~*^(?<prefix>/home/.*)/index.html\?zvalue=(?<zvalue>[^&]+)&(?<suffix>.*)$ $prefix/$zvalue/index.html?$suffix;
    }
    

    显然,正则表达式需要符合您的确切要求,以上只是概念证明。

    您可以在 if 块内和现有 location 内将变量与 proxy_pass 语句一起使用。详情请见this document

    例如:

    location / {
        proxy_pass http://example.com;
        if ($proxy) { proxy_pass http://example.com$proxy; }
    }
    

    任何不受map 约束的请求都将由第一个proxy_pass 语句透明地传递。

    【讨论】:

      猜你喜欢
      • 2020-12-18
      • 1970-01-01
      • 2019-03-14
      • 2020-09-29
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多