如何在 Nginx 中启用 X-Real-IP 和 X-Forwarded-For?我目前有以下内容来获取 Docker 网络中的真实 IP。
set_real_ip_from 172.18.0.0/32;
real_ip_header X-Real-IP;
real_ip_recursive on;
我也想将真实 IP 从 Cloudflare 传递到 Docker 容器。如何在同一配置中同时使用 X-Real-IP 和 X-Forwarded-For,一组 IP 用于 X-Real-IP,一组 IP 用于 X-Forwarded-For?
答案1
如果您尝试从 CloudFlare 后面获取真实 IP,则应使用其自己的标头 CF-Connecting-IP。如果您没有自己生成其他标头,则应忽略它们,因为它们可能是由客户端伪造的。
real_ip_header CF-Connecting-IP;
答案2
尝试地图ping 他们(不起作用):
map $remote_addr $real_header { default X-Real-IP; 172.18.0.1 X-Forwarded-For; } server { real_ip_header $real_header; }
尝试将这些流分离到不同的服务器。根据手册,real_ip_header 可以根据服务器或位置进行设置,因此您可以:
server { listen :8080; real_ip_header X-Real-IP; include "/all/other/stuff.conf"; } server { listen :8081; real_ip_header X-Forwarded-For; include "/all/other/stuff.conf"; }
使用位置将需要更多的语法糖来分隔它们,你可能需要使用 if,但它们是邪恶的。但我认为完全可以创建两个内部位置,并在两者之间进行手动内部重写。这对用户来说是完全隐藏的。
我想玩 Lua 也许也会有帮助,但请先尝试之前的建议。