在 Nginx 中启用 X-Real-IP 和 X-Forwarded-For

在 Nginx 中启用 X-Real-IP 和 X-Forwarded-For

如何在 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

  1. 尝试地图ping 他们(不起作用):

    map $remote_addr $real_header {
      default X-Real-IP;
      172.18.0.1 X-Forwarded-For;
    }
    
    server {
      real_ip_header $real_header;
    }
    
  2. 尝试将这些流分离到不同的服务器。根据手册,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";
    }
    
  3. 使用位置将需要更多的语法糖来分隔它们,你可能需要使用 if,但它们是邪恶的。但我认为完全可以创建两个内部位置,并在两者之间进行手动内部重写。这对用户来说是完全隐藏的。

  4. 我想玩 Lua 也许也会有帮助,但请先尝试之前的建议。

相关内容