1.反向代理
代理服务器的/etc/nginx/conf.d书写如下配置
#代理服务器,域名: proxy.cn
server{
listen 80;
server_name proxy.cn;
access_log /var/log/nginx/proxy.cn_access.log main;
error_log /var/log/nginx/proxy.cn_error.log notice;
location / {
proxy_pass http://10.0.0.7;
#lb01-->web发送请求的时候,保持host头
proxy_set_header Host $http_host;
}
}
#将请求发送给代理服务器
proxy_pass http://10.0.0.7;
#lb01-->web发送请求的时候,默认是ip,此时只能访问到默认虚拟主机,该命令修改web的请求头,Host部分。
proxy_set_header Host $http_host;
此处等同于proxy_set_header Host proxy.cn(域名)
结果:
此时,curl -H Host:proxy.cn http://10.0.0.5,可以通过访问10.0.0.5代理服务器访问web服务器10.0.0.7的页面。
若在web服务器需要知道客户端IP,需要加上proxy_set_header X-Forwarded-For $remote_addr;
多层代理则使用proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
生产环境可以如下配置:
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
2.负载均衡
代理服务器如下配置
#把所有web服务器写到此处,cfg_pools为服务器池塘名字,需要与下面对应
upstream cfg_pools{
server 10.0.0.7:80;
server 10.0.0.8:80;
}
server {
listen 80;
server_name cxk.oldboy.linux.cn;
access_log /var/log/nginx/cxk.cn_access.log main;
error_log /var/log/nginx/cxk.cn_error.log notice;
#location将请求发送给服务器池塘
location / {
proxy_pass http://cfg_pools;
#lb01-->web发送请求的时候,保持host头
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
虚拟主机正常配置即可(将虚拟主机看成正常的nginx配置)