如何拿到客户端真实的ip地址?
image.png
server {
server_name realip.aaa.com;
set_real_ip_from 122.230.59.111; #定义一个可信的ip地址,也就是客户端真实的ip是这个地址的时候会进行如下操作
real_ip_header X-Forwarded-For; #定义请求的头部为X-Forwarded-For
# real_ip_header X-Real_IP; #当设置请求的头部为 X-Real_IP时,$remote_addr等于客户端真实的ip
# real_ip_recursive off;
# real_ip_recursive on; #表示是否开启环回地址,当开启的时候最,如果X-Forwarded-For的最后一个ip和客户端的真实ip一样,则remote_addr返回的是前面的ip地址
location / {
return 200 "client real ip:$remote_addr\n"; #$remote_addr是X-Forwarded-For的最后一个ip地址
}
}
[root@hk conf.d]#nginx -s reload
[root@hk conf.d]#curl -H 'X-Forwarded-For:192.168.1.3,122.230.59.111' realip.zhangdazhi.com
client real ip:122.230.59.111
[root@hk conf.d]#curl -H 'X-Forwarded-For:192.168.1.3,122.230.59.111' realip.zhangdazhi.com
client real ip:192.168.1.3 #当开启环回ip的时候的结果
server {
server_name realip.zhangdazhi.com;
set_real_ip_from 122.230.59.111;
# real_ip_header X-Forwarded-For;
real_ip_header X-Real-IP; #当请求的头部设置为X-Real-IP时$remote_addr为客户端真实的ip地址
# real_ip_recursive off;
real_ip_recursive on;
location / {
return 200 "client real ip:$remote_addr\n";
}
}
下载并源码按照ip地址地理信息库
https://dev.maxmind.com/geoip
geoip_country /usr/share/GeoIP/GeoIP.dat;
geoip_city /usr/share/GeoIP/GeoLiteCity.dat;
geoip_proxy 192.168.1.0; #指明一个可信的地址
geoip_proxy_recursive on;
server {
server_name geoip.aaa.com;
location / {
return 200 '$geoip_country_name\n';
}
}
[root@hk conf.d]#curl geoip.aaa.com
China
参考:https://blog.csdn.net/zwmnhao1980/article/details/82267921










网友评论