nginx的 proxy_set_header的反向代理设置
proxy_set_header用来设定被代理服务器接收到的header信息。
1).应用场景:(反向代理的后台同一个机器有不同域名网站)
nginx服务并配置调度器,后端的两个web,端口也一样,都有虚拟主机:baidu和souhu,域名都是:
www.baidu.com 和 www.souhu.com 只是网页内容有点不同以作为区别。当访问百度时候,会轮询调度到后端的两个百度上,当访问搜狐的时候,也会轮询访问后面的两个搜狐上,需要做设置,否则当访问搜狐的时候,可能会访问到百度页面。
2).后台同一台机器两个网站域名的配置参考:apache的虚拟主机:
[root@localhost 桌面]# vim /etc/httpd/conf/httpd.conf
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin 1441107787@qq.com
DocumentRoot /baidu
ServerName www.baidu.com
ErrorLog logs/baidu.com-error_log
CustomLog logs/baidu.com-access_log common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin 1441107787@qq.com
DocumentRoot /souhu
ServerName www.souhu.com
ErrorLog logs/souhu.com-error_log
CustomLog logs/souhu.com-access_log common
</VirtualHost>
wq
3).设置proxy_set_header意义:
如果不设置proxy_set_header,则默认host的值为proxy_pass后面跟的那个域名或者IP(一般写IP),如果设置proxy_set_header,如 proxy_set_header host $host;那么就会访问哪个域名,就到哪个网站.
4).设置 X-Real-IP $remote_addr和proxy_set_header X-Forwarded-For意义:
proxy_set_header X-Real-IP $remote_addr;和proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
用来设置被代理端接收到的远程客户端IP,如果不设置,则header信息中并不会透传远程真实客户端的IP地址。
一般配置反向代理的通用写法,就是都带上下面参数,如:
server {
listen 80;
server_name www.aminglinux.com;
location /aming/
{
proxy_pass http://192.168.1.10:8080/linux/;
proxy_set_header host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}