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就可以。