nginx - set_real_ip_from 仍然包含在 HTTP_X_FORWARDED_FOR 中
问题描述
我正在尝试将我的反向 nginx 代理配置为发送客户端的真实 IP 地址而不是代理本身。
我正在尝试按照我看到的许多帖子中的建议实施,但它没有按预期工作。
以下是相关部分nginx.conf
http {
set_real_ip_from 123.0.0.0/8;
set_real_ip_from 123.123.12.22; -- example ip
real_ip_header X-Forwarded-For;
real_ip_recursive on;
server {
location @app {
proxy_pass http://127.0.0.1:3000;
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_set_header X-Forwarded-Proto $http_x_forwarded_proto;
}
}
据我了解,我们设置的 ipset_real_ip_from
是受信任的 ip,HTTP_X_FORWARDED_FOR
并将指向第一个或最后一个不受信任的 ip。但那没有发生。
当我尝试打印时request.env['HTTP_X_FORWARDED_FOR']
仍然看到123.123.12.22
并且request.remote_ip
仍然指向代理地址123.123.12.22
在这方面的任何帮助都会很棒。谢谢。
解决方案
似乎您误解了这个 nginx 功能。real_ip
模块用于恢复被另一个(前端或负载平衡)Web 服务器隐藏到某个附加标头的客户端地址。
real_ip
您应该从 nginx 配置中删除所有行并X-Real-IP
在应用程序中使用标头。如果这还不够,您可以X-Forwarded-For
在服务器块中替换为
proxy_set_header X-Forwarded-For $remote_addr;
推荐阅读
- c++ - 没有构造函数“Class:Class”的实例与参数列表匹配
- python - 有没有办法使框内下面的文本居中?
- c# - 第一条消息的 ID LINQ C#
- c# - TCPClient - 无法从传输连接读取数据:现有连接被远程主机强行关闭
- tkinter - 如何设置文本框的文本大小取决于在 tkinter 中选择了什么选项?
- python - 如何检查 abc == sqrt(a^b^c) 是否非常快(最好是 Python)?
- java - 为什么我在 Minio 中创建对象时出错?
- javascript - AJAX 分页未在新帖子中加载(未找到 admin-ajax)
- http - 添加到 Axios POST 的正文中
- r - R - rasterFromXYZ 在另一个 CRS 中投影 SPDF 时不起作用