Nginx 作为反向代理未传递客户端主机

Nginx 作为反向代理未传递客户端主机

我有 Nginx 服务器,它作为 nodejs 应用程序的反向代理。

Nginx 配置示例:

server {

  server_name www.example.com

  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_pass http://127.0.0.1:8796;
    proxy_redirect off;
  }
}

当前,当代理请求 $host 变量或传递的 Host 标头时始终包含 server_name 值(启动 nginx 的服务器的域)。

这样,req.headers['Host'] 始终具有 www.example.com 值。

Nginx(我用作反向代理)能否传递正确的请求客户端主机名到下面的代理应用程序(作为主机头)?

答案1

您忘记将 HTTP 协议版本设置为 1.1(默认为 HTTP/1.0),并且 HTTP 主机名变量错误。

参见下面的修复示例:

server {

  server_name www.example.com

  location / {
    proxy_http_version 1.1;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_pass http://127.0.0.1:8796;
    proxy_redirect off;
  }
}

相关内容