nginx+tomcat的环境下。后端需要获取真实的访问IP,如在java中通过
String ip=request.getHeader("X-Forwarded-For");
获取访问IP,那么就需要在nginx.conf配置文件中,在locaction中增加
proxy_set_header X-Forwarded-For $remote_addr;
如下:
       if ( $host = 'huadaninfo.com' ) {
   rewrite ^/(.*)$ https://www.huadaninfo.com/$1 permanent;
}

       #文件夹
root /usr/local/website;

location = / {
   #主页文件
   index index.html;    
}

       location ~* \.(jsp|do|action)$
{
   # 真实的客户端IP
   proxy_set_header   X-Real-IP        $remote_addr;
   proxy_set_header   REMOTE-HOST      $remote_addr;
   # 请求头中Host信息
   proxy_set_header   Host             $host; #:$server_port;
   # 代理路由信息
   proxy_set_header   X-Forwarded-For  $remote_addr;
   # 真实的用户访问协议
   proxy_set_header   X-Forwarded-Proto $scheme;
   proxy_pass http://huadaninfo;
   expires -1;
}
也可以写成
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
$remote_addr与$proxy_add_x_forwarded_for
在只有一个代理服务器的转发的情况下,效果是一样的,都可以真实的显示出客户端原始ip
但是一个web应用如果经过两个nginx转发,就有区别了:
在第二个nginx中$proxy_add_x_forwarded_for变量包含客户端请求头中的"X-Forwarded-For",与$remote_addr(此时值为第一台nginx服务器IP)两部分,他们之间用逗号分开。
一般情况下,我们只设定X-Forwarded-For $remote_addr就可以。