使用变量时,在proxy_pass中不替换Nginx位置部分

时间:2016-09-05 16:11:41

标签: nginx

我在myservice.mycompany.local

上收听服务

我们正在代理这样的请求

server {
  listen 80;
  location /myservice/ {
    proxy_pass http://myservice.mycompany.local/;
  }
}

一切正常,public.mycompany.com/myservice/api/1/ping上的正常请求被正确转换为http://myservice.mycompany.local/api/1/ping的请求,因为有/ 但现在如果我们尝试使用变量

  server {
  listen 80;
  set $MY_SERVICE             "myservice.mycompany.local";
  location /acm/ {
    proxy_pass http://$MY_SERVICE/;
  }
}

本地服务只会收到/的请求,而URI部分会丢失 我已经能够用几个版本的nginx重现这个“问题”

  • 1.8.1-1〜喘鸣
  • 1.4.6-1ubuntu3.5

我也可以通过简单的nc -l 127.0.0.2 8080替换代理服务并将其用作我变量的值来在本地重现它,所以它似乎真的发生在nginx内部

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

中未涵盖此行为

1 个答案:

答案 0 :(得分:0)

您可能发现了未记录的功能,但始终可以使用proxy_pass代替server { listen 80; set $MY_SERVICE "myservice.mycompany.local"; location /acm { rewrite ^/acm(/.*)$ $1 break; proxy_pass http://$MY_SERVICE; } } 别名:

<script> ... </script>