如何让 nginx 代理队列的上游在收到代理请求时看到原始请求者的主机/ip?



我的上游服务报告所有请求都来自我们的nginx代理,这导致了基于IP的限制的一些问题。我已经将以下内容添加到我们的配置中,希望可以缓解此问题:

proxy_set_header Host $host;
# Since our requests technically come from mini router on box...
real_ip_header X-Forwarded-For;
set_real_ip_from 127.0.0.1;
proxy_pass https://$destination;

但这显然是行不通的。是否有单独的指令可用于确保我们的请求似乎来自我们的实际客户端而不是来自代理队列?

我相信当多个IP被链接时解决X-Forwarded-For问题的关键是最近引入的配置选项real_ip_recursive(在nginx 1.2.1和1.3.0中添加(。来自nginx realip文档:

如果启用了递归搜索,则原始客户端地址 匹配 其中一个受信任地址被最后一个替换 在请求标头字段中发送的不受信任的地址。

默认情况下,nginx会抓取链中的最后一个IP地址,因为这是唯一被认为是受信任的IP地址。但是,启用新real_ip_recursive并具有多个set_real_ip_from选项后,您可以定义多个受信任的代理,它将获取最后一个不受信任的IP。

例如,使用此配置:

set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;
real_ip_recursive on;

最新更新