![nginx 将 X-Real-IP 设置为下游代理服务器以防止欺骗](https://linux22.com/image/679919/nginx%20%E5%B0%86%20X-Real-IP%20%E8%AE%BE%E7%BD%AE%E4%B8%BA%E4%B8%8B%E6%B8%B8%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BB%A5%E9%98%B2%E6%AD%A2%E6%AC%BA%E9%AA%97.png)
我想要正确设置位于 amazon ELB 后面的 nginx 代理域的 X-Real-IP。
IE
AMAZON ELB <=> NGINX PROXY <=> REST APP1
<=> REST APP2
到目前为止,我发现下面的方法可以正常工作并防止 IP 欺骗。我在 nginx.conf 中全局设置了此项
real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8;
real_ip_recursive on;
不过,我也有一些位于 NGINX 后面的 REST 应用程序
我的其余应用程序将使用 x-real-ip(如果设置)或 x-forwarded-for。在正常使用下,真实客户端 IP 是正确的。
在设置了 x-real-ip 和 x-forwarded-for 标头之一或两者的欺骗 IP 攻击下,我在 REST 客户端中看到了欺骗 IP。但是,nginx 显示正确的客户端 IP。
目前在域名主机中我已经设置
proxy_pass_request_headers 开启;
如何将 x-real-ip 设置为 REST 应用程序的真正可信 IP?
我估计我需要一条proxy_set_header
带有 X-Real-IP 的线路。但我如何引用 real-ip 模块设置的 real-ip 标头?
答案1
我找到了答案。
我一直试图设置在网上找到的以下指令。但似乎不起作用。
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
经过一番折腾,我想尝试将它们放在位置块中。我曾尝试将它们放在 html 部分和服务器部分中。但是,如果您将上述内容放在位置块中(如下所示),它将起作用。例如
location / {
proxy_pass http://localhost:1234;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_request_headers on;
}