获取真实的客户端ip
问题:多级代理以后,如何获取客户端真实的ip
实验环境:
三台机器,server2作为nginx-web服务器,server3nginx服务器作为server2的代理,server4作为一个客户端
(过程:server4客户端访问server2时,需要经过server3代理服务器)
server3配置:
[root@server3 conf]# vim /usr/local/nginx/conf/nginx.conf
server4添加域名(便于通过域名进行访问)
vim /etc/hosts
server2中做一个简单的web服务器
测试:
在server4中访问nginx服务器server3
此时server2的nginx-web服务器获取到的ip为nginx代理服务器server3的ip。不是访问客户端真实的ip
要获取真实的客户端的ip,需要进行如下的操作:
在nginx-web服务器server2中:
[root@server2 logs]# vim /usr/local/lnmp/nginx/conf/nginx.conf
[root@server2 ~]# nginx -t
[root@server2 ~]# nginx -s reload
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
set_real_ip_from 172.25.254.2; #从代理处获取真实ip
real_ip_header X-Forwarded-For; #从http请求头中拿到数据
real_ip_recursive on;
在server3的nginx代理服务器中:
[root@server3 logs]# vim /usr/local/nginx/conf/nginx.conf
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.westos.org;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #从真实的请求头中拿到数据,真实后端才能保存下来
proxy_pass http://westos;
测试:
可以发现,ip地址从代理服务器的ip地址变为真实服务器的ip地址