当前位置: 首页 > news >正文

$http_x_forwarded_for和$remote_addr对比

维度 $remote_addr $http_x_forwarded_for
来源 TCP 连接层 (由操作系统内核提供) HTTP 请求头 (由客户端或代理服务器生成)
含义 与当前 Nginx 服务器建立直接连接的 IP 地址。 一个 IP 列表,记录了请求经过的代理链路。
格式 单个 IP 地址 (如 202.10.1.1) 逗号分隔的 IP 链 (如 202.10.1.1, 10.0.0.5)
可伪造性 不可伪造 (基于 TCP 三次握手) 极易伪造 (普通的 HTTP 头,谁都能改)
典型场景 用户直连服务器时,它是用户真实 IP。 有代理时,它是上一级代理(如 CDN/负载均衡)的 IP。 用于在多层代理架构中传递最原始的用户 IP

场景演示:为什么你需要两者结合?

假设架构为:用户 (1.1.1.1) -> 代理 Nginx (2.2.2.2) -> 后端 Nginx (3.3.3.3)

在代理 Nginx (2.2.2.2) 上:

  • $remote_addr = 1.1.1.1 (用户直连它)
  • $http_x_forwarded_for = 空 (或者用户伪造的值)

在后端 Nginx (3.3.3.3) 上:

代理 Nginx 转发请求时,通常会配置 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;。此时后端 Nginx 看到:

  • $remote_addr = 2.2.2.2 (注意: 这是代理 Nginx 的 IP,因为它是直接连接后端的人)
  • $http_x_forwarded_for = 1.1.1.1, 2.2.2.2 (第一个是用户 IP,第二个是代理 IP)

结论:在后端 Nginx 看来,$remote_addr 丢失了用户真实 IP,必须依靠 $http_x_forwarded_for 才能找回 1.1.1.1


最佳实践:如何安全地获取真实 IP?

既然 $http_x_forwarded_for 可以伪造,我们该如何信任它?

答案是:结合 $remote_addr 做白名单校验。

Nginx 提供了 ngx_http_realip_module 模块来解决这个问题。它的逻辑是:

"只有当直接连接我的人($remote_addr)是我信任的代理服务器(如内网 LB)时,我才相信它传过来的 $http_x_forwarded_for 里的 IP 是真的,并将其替换为当前的 $remote_addr。"

配置示例:

http {# 1. 定义信任的代理 IP 段 (比如你的内网负载均衡网段)set_real_ip_from 10.0.0.0/8; # 2. 告诉 Nginx 从哪个头里取 IPreal_ip_header X-Forwarded-For;# 3. 开启递归 (自动剥离信任的代理 IP,直到找到最外侧的真实 IP)real_ip_recursive on;server {# 配置生效后,$remote_addr 变量将自动变为真实用户 IP# 此时记录日志或传给后端,拿到的就是清洗过的真实 IP}
}
http://www.jsqmd.com/news/563288/

相关文章:

  • 速腾Helios雷达+fast-LIO2实战:如何将XYZIRT点云数据高效喂给算法并评估建图效果
  • 从Animal Pose到YOLOv8-Pose:手把手教你训练一个动物姿态估计模型
  • 解决Ubuntu远程桌面连接黑屏问题:无显示器环境下的完整配置指南
  • 2026文旅景观亮化厂家靠谱性深度评测:文旅亮化、旅游景区亮化、景观亮化、景观泛光照明、标识标牌、桥梁河道亮化选择指南 - 优质品牌商家
  • 深入MTK DRM显示框架:LK阶段compare_id与Kernel DTS的‘握手’协议详解
  • Minecraft 1.12.2 彩色渐变字体模组:打造个性化聊天与物品命名
  • Whisky:让macOS高效运行Windows程序的跨平台解决方案
  • Nrfr免Root终极指南:如何轻松解决国际漫游兼容性问题
  • 2026年比较好的小型分散机多家厂家对比分析 - 品牌宣传支持者
  • Python 正则表达式详解:从原理到实践
  • 2026年热门的装饰板UV光固化涂料/覆膜亮光UV光固化涂料公司对比推荐 - 品牌宣传支持者
  • Alpamayo-R1-10B惊艳案例:暴雨天气下通过多帧图像融合提升轨迹预测置信度
  • mysql技巧(十二):Buffer Pool 缓冲池-MySQL为何能“亿级数据”查得快
  • PapaParse实战:如何在Node.js中高效处理百万级CSV数据(附性能优化技巧)
  • 2026MBA辅导机构推荐榜高性价比选品指南:管综数学培训/管综数学辅导/管综笔试辅导/MPA培训/MPA笔试培训/选择指南 - 优质品牌商家
  • 2026年比较好的小型分散机厂家精选合集 - 品牌宣传支持者
  • nginx传递真实客户端ip
  • StructBERT模型轻量化探索:知识蒸馏与模型压缩实践
  • 为什么你的Gradle构建这么慢?可能是依赖配置用错了!implementation vs api深度解析
  • 后端服务架构演进:从单体到微服务的转型之路
  • CPUDoc:基于动态CpuSet掩码与自适应电源管理的Windows CPU性能优化架构设计原理
  • 嵌入式系统处理器选型与应用指南
  • 新手必看:红日靶场信息收集实战指南(含Nmap扫描与MySQL弱口令破解)
  • 数字人视频生成利器:HeyGem批量版快速部署与效果展示
  • 保姆级教程:在YOLOv7上部署GradCAM++可视化(避坑指南+效果对比)
  • STM32软硬件协同工作原理与程序运行机制
  • 2026跑腿系统多站点可靠服务商推荐:外卖系统多站点/外卖系统开发/外卖系统搭建/外卖系统独立部署/选择指南 - 优质品牌商家
  • 别再手动算了!用Excel这个万能公式,5分钟搞定度分秒转经纬度
  • 自由开发者生存手册:软件测试从业者的接单、定价与客户管理
  • 51单片机+RC522模块DIY智能门禁卡:从硬件选型到代码调试全流程