反向代理之后,怎么拿到真实客户端 IP
应用日志里全是 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 是逗号分隔的列表,从左往右是客户端到代理的路径,取第一个不可信地址之前的那个,才是真实来源。