利用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”把前面的“#”去掉,再在下一行加入如下两行:

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地址了!