1.当多台nginx转发服务后,程序想要获取客户端的真实ip地址
$remote_addr
:nginx 中的一个变量,为上一层请求来源的 IP 地址
X-Forworded-For请求头:每经过一跳就会将当前ip添加到后面:
例:X-Forwarded-For: 1.1.1.1,2.2.2.2,3.3.3.3,4.4.4.4
1.1获取x-forwarded-for中图解:
set_real_ip_from
:默认为空,可设置为任意 IP 或 IP 段,实例中的 0.0.0.0/0 表示覆盖了所有网段real_ip_header
:默认值是 X-Real-IP,可以设置为任意字符串,一般建议改用 X-Forwarded-For,下面也均以 X-Forwarded-For 为例real_ip_recursive
:默认为 off,可设 on / off 两种值
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
2.nginx中获取真实ip地址:
2.1只添加某一个路径监听
location ^~/user/ {
proxy_pass http://10.xx.xx.xx/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
set_real_ip_from 10.2.0.0; # 所有授信任的内部节点IP,排除的ip地址
real_ip_header X-Forwarded-For;
real_ip_recursive on;
}
2.2添加default.conf中全局
real_ip_header X-Forwarded-For;
set_real_ip_from 60.11.11.55;
set_real_ip_from 12.24.26.37; #表示排除 X-Forwarded-For中的两个ip
real_ip_recursive on;
server {
listen 80;
xxx
}
#转发头
location ^~/user/ {
proxy_pass http://10.xx.xx.xx/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}