隐藏Nginx反向代理redirect中的端口

我的设置如下:

  • Webserver :在端口8529上监听的应用程序。
  • 反向代理 :Nginx监听端口80。

问题是我的Nginx将请求redirect到端口8529,并且出现在像http://some.domain.com:8529/foo这样的URL中,这不是我想要完成的。

我现在的nginx sites-available相关文件如下:

 server { listen 80; server_name some.domain.com; location / { proxy_pass http://localhost:8529/foo; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; } } 

其中some.domain.com位于指向127.0.0.1 /etc/hosts

任何提示?

无论是你的上游服务器发出redirect,你禁止nginx重写与proxy_redirect off; 并通过在proxy_pass指令中丢失斜线或您的应用程序正在构build这些URL。

注意:正如Alexey所说,在这种情况下,尾部的斜杠是很重要的,因为nginx将移除匹配位置前缀的标准化URI的一部分,即/在将其附加到proxy_pass URI之前。 所以你的后台服务器会收到/foobar的请求,而你最有可能在等待/foo/bar

在代理期间隐藏端口需要服务器主体中的这两行:

 server_name_in_redirect off; proxy_set_header Host $host:$server_port; 

conf是这样的:

 server { listen 80; server_name example.com; server_name_in_redirect off; proxy_set_header Host $host:$server_port; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:8080; } access_log off; }