在实际生产中经常是多层网络转发的, 如: 安全防护 》负载均衡 》后端服务器
默认的nginx配置拿到的是上一级的ip, 获取真实iP 需要修改几个地方:
nginx日志格式, vim /etc/nginx/nginx.conf
把$remote_addr
改成$http_x_real_ip
......
log_format main '$http_x_real_ip - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
... ...
nginx server配置, 设置realip相关参数
server {
charset utf-8;
client_max_body_size 128M;
set_real_ip_from 0.0.0.0/0; #设置信任IP, 从这写来路中获取真实IP, 支持多行, 根据需要设置
real_ip_header X-Forwarded-For; #从X-Forwarded-For中取,取最后一个
real_ip_recursive on; #如果X-FOrwarded-For的最后一个地址和客户端地址相同,pass掉,取上一个
}
realip模块, 参考官方文档: Module ngx_http_realip_module