在 Nginx 反向代理重定向中隐藏端口

在 Nginx 反向代理重定向中隐藏端口

我的设置如下:

  • 网络服务器:应用程序正在监听端口 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_passURI 之前。因此,您的后端服务器将收到请求,/foobar而您很可能正在等待/foo/bar

相关内容