我有 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;
}
}