Nginx反向代理导致PHP获取不到正确的HTTP_HOST,SERVER_NAME,客户端IP的解决方法
Posted 宗帅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx反向代理导致PHP获取不到正确的HTTP_HOST,SERVER_NAME,客户端IP的解决方法相关的知识,希望对你有一定的参考价值。
今天第一次陪nginx负载均衡,发现php无法获取HTTP_HOST
贴上的Nginx配置
upstream abc.com { server 10.141.8.55:8005; server 10.141.8.55:8006; } server { listen 80; server_name www.xxx.com; log_not_found off; access_log /var/log/nginx/html-access.log main; charset utf-8; location / { proxy_pass http://abc.com; } }
echo $_SERVER[‘HTTP_HOST‘];
输出abc.com
仔细查看Nginx配置,很容易发现PHP获取到的HTTP_HOST是Nginx代理过来的。
解决的办法有两种
方法一,将abc.com改成你www.xxx.com
不过这种方法还不是很好,如果server_name有多个怎么办呢
所以
方法二
在location/{}加上 proxy_set_header Host $host;
既然HTTP_HOST有问题,那其他客户端的信息也肯定是不对的。比如客户端IP。
所以还得加上其他配置,完整的Nginx配置如下
upstream abc.com { server 10.141.8.55:8005; server 10.141.8.55:8006; } server { listen 80; server_name www.xxx.com; log_not_found off; access_log /var/log/nginx/html-access.log main; charset utf-8; location / { proxy_pass http://abc.com; 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 HTTP_X_FORWARDED_FOR $remote_addr; proxy_redirect default; } }
以上是关于Nginx反向代理导致PHP获取不到正确的HTTP_HOST,SERVER_NAME,客户端IP的解决方法的主要内容,如果未能解决你的问题,请参考以下文章
nginx获取上游真实IP(ngx_http_realip_module)
nginx 反向代理uwsgi,导致Django项目下载文件只有1G