利用nginx反向代理,后端Web如何获取真实客户端ip
一、nginx反向代理nginx,后端的nginx该如何配置才能获取到客户端的真实IP地址呢。
1.首先需要在nginx代理服务器上的配置文件nginx.conf上的 location 中添加一行参数:
proxy_set_header X-Real-IP $remote_addr; |
重启nginx服务
2.对后面的nginx进行配置
vim /usr/local/nginx/conf/nginx.conf 加入下面参数:
set_real_ip_from 192.168.88.133 ; #ip为nginx代理服务器的ip地址,这一行需要加在http内,但要在server外 |
重启nginx服务
以上配置就可以在后端nginx服务器上查看客户端的真实IP地址了。
二、nginx反向代理apache
httpd-2.2版本
1.在代理服务器上nginx的配置和反向代理nginx的配置是一样,参考1-1,这里就不再赘述;
2.配置apache
vim /usr/local/apache2/conf/httpd.conf 找到如下
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
将此行中的 '%h'修改成 ‘%{X-Real-IP}i'
重启nginx服务即可;
httpd-2.4版本
vim /usr/local/apache2/conf/httpd.con 找到“#LoadModule remoteip_module modules/mod_remoteip.so”把前面的“#”去掉,再在</IfModule>下一行加入如下两行:
RemoteIPHeader X-Forwarded-For RemoteIPInternalProxy 127.0.0.1 |
再找到下面两行
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common |
修改成如下(红色的'%a'是加入的):
LogFormat "%h %a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %a %l %u %t \"%r\" %>s %b" common |
重启httpd服务即可(日志中会出现个IP,第二列是为客户端真实IP);
三、nginx反向代理tomcat
1.在代理服务器上nginx的配置和上面反向代理nginx/apache的设置是一样的。
2.配置tomcat
vim /usr/local/tomcat/conf/server.xml
找到 pattern="%h %l %u %t "%r" %s %b" /> 基本上都在最后面
把 %h 修改成 %{X-Real-IP}i
重启nginx和tomcat 即可。(其实tomcat和apache的修改的地方是一样的,只是配置文件不同)
总结:nginx反向代理web集群时,nginx的配置方式只有一种,只需要增加 proxy_set_header X-Real-IP $remote_addr 这一行参数,后端的WEB只需要修改相应的配置文件就可以获取到客户端真实的IP地址了!
转载于:https://blog.51cto.com/cuixiang/1653908