Plainnotes

反向代理之后,怎么拿到真实客户端 IP

2025-11-05 · 3 分钟部署

应用日志里全是 127.0.0.1 或者负载均衡的内网 IP,因为请求经过了反向代理。

nginx 加头:

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

应用侧要**只信任来自代理的**这个头,否则任何人发一个 X-Forwarded-For: 1.2.3.4 就能伪造来源。Django 的 USE_X_FORWARDED_HOST、Express 的 trust proxy、Spring 的 server.forward-headers-strategy,都要配成信任具体代理 IP,而不是 *。

多层代理时 XFF 是逗号分隔的列表,从左往右是客户端到代理的路径,取第一个不可信地址之前的那个,才是真实来源。