一.测试环境
OS: rhel6
Lib1: 192.168.10.100 ##前端代理服务器
Lib2: 192.168.10.111 ##后端web服务器,nginx需要额外安装http_realip_module模块
二.反向代理的原理
在web服务器的前面放置一个代理服务器,当客户端需要访问web服务器时,直接访问代理服务器并由代理服务器做出判断是否将此次封装用户的请求报文发往web服务器,反向代理对外是透明的,用户并不知道自己访问的是一个代理服务器。
三.实现反向代理
1.在web服务器和反向代理服务器上都安装nginx-1.8.0提供web服务(安装过程这里不再赘述)
2.在代理服务器(192.168.10.110)上配置proxy_pass 实现反向代理功能
3.#vim /etc/nginx/.nginx.conf 添加
location /forum {
proxy_pass http://192.168.10.111/test;
}
PS: 如果这里要使用正则表达式匹配,proxy_pass 只能指一个服务器地址。这时需要在web服务器(192.168.10.111)上建立相应的匹配目录,如这里匹配的forum目录
location ~*^ /forum {
proxy_pass http://192.168.10.111;
}
4.#mkdir /usr/html/forum
5.#vim /usr/html/forum/index.html ##提供测试页面
6.#service nginx restart
7.#访问代理服务器看web服务是否能正常访问
8.在web服务器(192.168.10.111)上创建测试目录文件
#mkdir /usr/html/test
#vim /usr/html/test/index.html
#service nginx restart
9. 在浏览器上访问192.168.10.110/forum 看是否访问的是(192.168.10.111)上的测试页面,如果是则表示实验成功。。。。。
10.查看192.168.10.111 上的访问日志,发现客户端ip是代理服务器的ip, 这对于后期的日志分析不利,如何解决?
第一种方法:
192.168.10.110 (前端代理服务器)
location /forum {
proxy_pass http://192.168.10.111/test;
proxy_set_header X-Real-IP $remote_addr; ###添加http首部
proxy_set_header Host $host;
}
192.168.10.111 (后端web服务器) 在server段内添加
set_real_ip_from 192.168.10.0/24;
real_ip_header X-Real-IP; ##在编译时需要安装http_realip_module模块
real_ip_recursive on;
第二种方法:
192.168.10.110 (前端代理服务器)
location /forum {
proxy_pass http://192.168.10.111/test;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ###添加http首部
proxy_set_header Host $host;
}
192.168.10.111 (后端web服务器) 在server段内添加
set_real_ip_from 192.168.10.0/24;
real_ip_header X-Forwarded-For; ##在编译时需要安装http_realip_module模块
real_ip_recursive on;
PS: set_real_ip_from:真实服务器上一级代理的IP地址或者IP段,可以写多行。
real_ip_header:从哪个header头检索出要的IP地址。
real_ip_recursive:递归排除IP地址,ip串从右到左开始排除set_real_ip_from里面出现的IP,如果出现了未出现这些ip段的IP,那么这个IP将被认为是用户的IP。
一般来说,X-Forwarded-For是用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For中,而X-Real-IP,一般只记录真实发出请求的客户端IP。
11.#tail /var/log/nginx/access.log ###查看是否显示真实客户端ip
四.后端服务器使用apache的情况如何使用真实的客户端ip
1.192.168.10.110 (前端代理服务器)
location /forum {
proxy_pass http://192.168.10.111/test;
proxy_set_header X-Real-IP $remote_addr; ###添加http首部
}
2.修改后端服务器上/etc/httpd/conf/httpd.conf文件
LogFormat %h 改为 %(X-Real-IP)i
五.怎么样将整个网站的访问都代理到后端
location / {
proxy_pass http://192.168.1.113;
proxy_set_header X-Real-IP $remote_addr;
}