在多层反代系统中,往往最底层的反代应用获取到的并非访问者的真实 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

枯死的灌木!