Nginx反向代理导致PHP获取不到正确的HTTP_HOST,SERVER_NAME,客户端IP的解决方法
2016-04-02 12:09
1141 查看
今天第一次配Nginx负载均衡,发现PHP无法获取HTTP_HOST
贴上的Nginx配置
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配置如下
贴上的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; } }
相关文章推荐
- Linux _多线程并发服务TCP
- 针对于HttpComponet的功能资料
- xstream解析、httputils请求
- Linux_ 多进程并发服务TCP
- 神经网络入门(连载之六)
- 神经网络入门(连载之五)
- 神经网络入门(连载之四)
- 神经网络入门(连载之三)
- Linux _TCP 浅解
- 神经网络入门(连载之二)
- Android网络编程(二)HttpClient与HttpURLConnection
- 神经网络入门(连载之一)
- 网络:用 socket 做简单聊天
- 遗传算法入门(连载之十)
- 遗传算法入门(连载之九)
- 遗传算法入门(连载之八)
- 遗传算法入门(连载之七)
- 【笔试/面试】—— 网络
- 遗传算法入门(连载之六)
- 神经网络的严冬与复兴之路