在多层反代系统中,往往最底层的反代应用获取到的并非访问者的真实 ip ,而是上层反代应用的 ip 地址。
所以 Nginx 日志中默认输出的是上层反代应用的 ip ,这非常不利于统计分析 Nginx 日志。
想要让 Nginx 日志输出真实访问者的 ip ,需要有两个条件:
条件1:配置上层反代在请求头中传递真实访问者 ip ,以 Nginx 实例
server {
listen 80;
server_name domain.com;
location / {
……
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
……
}
}
条件2:配置底层 Nginx 反代从请求头中获取真实访问者 ip
http {
……
# 指定允许信任的上游代理(可以使用 IP 或 CIDR 范围)
set_real_ip_from 192.168.2.4;
# 使用 X-Forwarded-For 头部获取真实客户端 IP
real_ip_header X-Forwarded-For;
# 如果信任链中有多个代理,可开启递归查找(可选)
real_ip_recursive on;
……
}
当满足2个条件后,Nginx 日志中显示的就是真实访问者的 ip