Nginx反向代理多虚拟主机及记录真实客户IP
2016-04-19 20:14
1046 查看
1.多虚拟机反向代理
■
___________________________________________________________
主机信息:
Nginx代理:192.168.1.201
Nginx_web_1:192.168.1.202
Nginx_web_2:192.168.1.203
测试机:192.168.1.204
-----------------------------------三台主机安装
#安装参数
#主配置略
----------------------------------两台web虚拟主机配置
#虚拟主机配置
原因:
当用户访问域名时确实是携带了www.szk.com的主机头请求Nginx反向代理服务器,但是反向代理向下面WEB节点发起请求时,默认并没有在请求头里告诉节点服务器要找那台虚拟主机,所以,WEB节点服务器接收到请求后发现没有主机头信息,因此,就把节点服务器的第一个虚拟主机发给了反向代理了。
解决:
当反向代理向后重新发起请求时,要携带主机头信息,以明确告诉节点服务器要找哪个虚机主机。在Nginx代理www服务虚拟主机配置里增加如下配置即可:
proxy_set_header Host $host;
■
多虚机负载及代理成功了,但是WEB日志访问IP是代理服务器的而不是真实客户端的
___________________________________________________________
----------------------------------WEB配置
-----------------------------------测试
本文出自 “抚琴煮酒” 博客,请务必保留此出处http://szk5043.blog.51cto.com/8456440/1765513
■
___________________________________________________________
主机信息:
Nginx代理:192.168.1.201
Nginx_web_1:192.168.1.202
Nginx_web_2:192.168.1.203
测试机:192.168.1.204
-----------------------------------三台主机安装
#安装参数
cd /usr/local/src/ tar zxvf nginx-1.6.2.tar.gz cd nginx-1.6.2 yum install -y pcre-devel openssl-devel gzip yum install openssl-devel -y ./configure --prefix=/usr/local/nginx --with-pcre --with-http_ssl_module --with-http_stub_status_module make && make install#启动脚本略
#主配置略
----------------------------------两台web虚拟主机配置
#虚拟主机配置
mkdir /usr/local/nginx/conf/vhosts vim /usr/local/nginx/conf/vhosts/server.conf server { listen 80 ; server_name bbs.szk.com; location / { root /data/bbs; index index.html index.htm; } access_log logs/access_bbs.log ; } server { listen 80 ; server_name www.szk.com; location / { root /data/www; index index.html index.htm; } access_log logs/access_www.log ; }---------------------------------两台web创建站点目录及测试文件
for n in bbs www;do mkdir -p /data/$n;echo "$n.szk.com_202" >/data/$n/index.html;done cat /data/bbs/index.html echo "192.168.1.202 www.szk.com" >> /etc/hosts echo "192.168.1.202 bbs.szk.com" >> /etc/hosts /etc/init.d/nginx configtest /etc/init.d/nginx start
for n in bbs www;do mkdir -p /data/$n;echo "$n.szk.com_203" >/data/$n/index.html;done cat /data/www/index.html echo "192.168.1.203 www.szk.com" >> /etc/hosts echo "192.168.1.203 bbs.szk.com" >> /etc/hosts /etc/init.d/nginx configtest /etc/init.d/nginx start------------------------------ nginx代理配置
vim /usr/local/nginx/conf/nginx.conf upstream www_server_pools { server 192.168.1.202:80 weight=1; server 192.168.1.203:80 weight=1; } upstream bbs_server_pools { server 192.168.1.202:80 weight=1; server 192.168.1.203:80 weight=1; } server { listen 80; server_name www.szk.com; location / { proxy_pass http://www_server_pools; } } server { listen 80; server_name bbs.szk.com; location / { proxy_pass http://bbs_server_pools; } } echo "192.168.1.201 www.szk.com" >> /etc/hosts echo "192.168.1.201 bbs.szk.com" >> /etc/hosts-----------------------------------测试
[root@lab-4-C6 ~]# echo "192.168.1.201 www.szk.com" >> /etc/hosts echo "192.168.1.201 bbs.szk.com" >> /etc/hosts [root@lab-4-C6 ~]# curl bbs.szk.com bbs.szk.com_202 [root@lab-4-C6 ~]# curl bbs.szk.com bbs.szk.com_203 [root@lab-4-C6 ~]# curl www.szk.com bbs.szk.com_203 [root@lab-4-C6 ~]# curl www.szk.com bbs.szk.com_202#反向代理、负载均衡功能已经实现,但有多台虚拟主机时,出现访问出错
原因:
当用户访问域名时确实是携带了www.szk.com的主机头请求Nginx反向代理服务器,但是反向代理向下面WEB节点发起请求时,默认并没有在请求头里告诉节点服务器要找那台虚拟主机,所以,WEB节点服务器接收到请求后发现没有主机头信息,因此,就把节点服务器的第一个虚拟主机发给了反向代理了。
解决:
当反向代理向后重新发起请求时,要携带主机头信息,以明确告诉节点服务器要找哪个虚机主机。在Nginx代理www服务虚拟主机配置里增加如下配置即可:
proxy_set_header Host $host;
[root@lab-4-C6 ~]# curl bbs.szk.com bbs.szk.com_202 [root@lab-4-C6 ~]# curl bbs.szk.com bbs.szk.com_203 [root@lab-4-C6 ~]# curl www.szk.com bbs.szk.com_203 [root@lab-4-C6 ~]# curl www.szk.com bbs.szk.com_202[b]2.记录真实客户端IP[/b]
■
多虚机负载及代理成功了,但是WEB日志访问IP是代理服务器的而不是真实客户端的
___________________________________________________________
[root@lab-2-C6 ~]# cat /usr/local/nginx/logs/access_bbs.log 192.168.1.202 - - [19/Feb/2016:08:50:17 +0800] "GET / HTTP/1.1" 200 16 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" 192.168.1.201 - - [19/Feb/2016:09:16:22 +0800] "GET / HTTP/1.0" 200 16 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" 192.168.1.201 - - [19/Feb/2016:09:16:26 +0800] "GET / HTTP/1.0" 200 16 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" 192.168.1.201 - - [19/Feb/2016:09:16:27 +0800] "GET / HTTP/1.0" 200 16 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"-------------------------------------Nginx代理配置
[root@lab-1-C6 ~]# vim /usr/local/nginx/conf/nginx.conf log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; server { listen 80; server_name bbs.szk.com; location / { proxy_pass http://bbs_server_pools; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr;
----------------------------------WEB配置
[root@lab-2-C6 ~]# vim /usr/local/nginx/conf/nginx.conf log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
-----------------------------------测试
[root@lab-2-C6 ~]# cat /usr/local/nginx/logs/access_bbs.log 192.168.1.201 - - [19/Feb/2016:13:42:37 +0800] "GET / HTTP/1.0" 200 16 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "192.168.1.204" 192.168.1.201 - - [19/Feb/2016:13:42:43 +0800] "GET / HTTP/1.0" 200 16 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "192.168.1.204"
本文出自 “抚琴煮酒” 博客,请务必保留此出处http://szk5043.blog.51cto.com/8456440/1765513
相关文章推荐
- IIS的反向代理
- Nginx-No.02 Nginx 反向代理模板
- 如果nginx 中worker_connections 值设置是1024,worker_processes 值设置是4,按反向代理模式下最大连接数的理论计算公式: 最大连接数 = worker_...
- 用IIS配置反向代理实现方法
- 反向代理服务器的工作原理
- Configuring Squid as an accelerator/SSL offload for Outlook Web Access
- nginx 一二事(3) - 反向代理以及负载均衡
- 使用Squid做代理服务器,Squid单网卡透明代理配置详解(转)
- 使用Squid做代理服务器,Squid单网卡透明代理配置详解(转)
- Node.js站点使用Nginx作反向代理时配置GZip压缩的教程
- nginx 结合tomcat 做简单的反向代理
- squid做代理服务器实例配置
- squid实例配置之静态cdn
- nginx安装,反向代理配置
- 初实nginx服务器配置之反向代理服务技术
- squid 代理服务
- 架构高性能网站秘笈(四)——反向代理缓存
- Nginx简介及用户认证、访问控制和反向代理配置
- 抛弃Nginx使用nodejs做反向代理服务器
- 正向代理--反向代理