我的设置如下:
- 网络服务器:应用程序正在监听端口 8529。
- 反向代理:Nginx 监听 80 端口。
问题是我的 Nginx 将请求重定向到端口 8529,并且这在 URL 中显示为这样http://some.domain.com:8529/foo
,这不是我想要实现的。
我目前的nginxsites-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
在 内/etc/hosts
指向哪里127.0.0.1
。
有什么提示吗?
答案1
在代理期间隐藏端口需要在服务器主体中添加这两行:
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;
}
答案2
您的上游服务器发出了重定向,并且您禁止 nginx 使用指令proxy_redirect off;
中的尾随斜杠来重写它proxy_pass
,或者您的应用程序正在构建这些 URL。
注意:正如 Alexey 所说,在这种情况下,尾部斜杠很重要,因为 nginx 将删除与位置前缀匹配的规范化 URI 部分,即/
在将其附加到proxy_pass
URI 之前。因此,您的后端服务器将收到请求,/foobar
而您很可能正在等待/foo/bar
。