负载均衡接入怎么配置客户端真实 IP(X-Forwarded-For)透传

秋枫君_7757

秋枫君_7757

2026-10-25

723人浏览

原创

负载均衡接入时需配置客户端真实ip透传,核心是正确处理x-forwarded-for头:每层代理追加自身ip、nginx用$proxy_add_x_forwarded_for并配置set_real_ip_from与real_ip_header实现ip还原,后端须主动解析xff首ip并校验有效性。

负载均衡接入怎么配置客户端真实 ip(x-forwarded-for)透传

负载均衡接入时配置客户端真实 IP 透传,核心是让每层代理正确添加、识别并信任 X-Forwarded-For(XFF)头,同时避免伪造风险。不能只靠“转发头”,必须配合可信源控制与后端解析逻辑。

明确 X-Forwarded-For 的生成规则

XFF 是一个以逗号分隔的 IP 列表,格式为:
X-Forwarded-For: 客户端真实IP, 代理1, 代理2, ...
最左侧 IP 是原始客户端地址,后续是各跳代理 IP。关键点:

  • 每层代理应在转发请求时 追加 自己的 $remote_addr,而不是覆盖;
  • Nginx 推荐用 $proxy_add_x_forwarded_for 变量,它会自动判断是否已有 XFF 并做追加;
  • CDN(如 Cloudflare)、云负载均衡(如阿里云 SLB、AWS ALB)通常默认携带 XFF,且首 IP 可信;
  • 若前端使用非标准头(如 X-Cluster-Client-IP),需在 Nginx 中显式映射:
    proxy_set_header X-Real-IP $http_x_cluster_client_ip;

多层代理下确保 Nginx 正确还原真实 IP

当请求经过 CDN → 负载均衡 → Nginx → 后端时,$remote_addr 已变成上一跳 IP。此时仅设 header 不够,必须让 Nginx 主动解析 XFF 并修正内置变量:

  • 在 http 或 server 块中声明可信代理段:
    set_real_ip_from 10.0.0.0/8;
    set_real_ip_from 192.168.0.0/16;
    set_real_ip_from 172.16.0.0/12;
    (补充云厂商私有网段,如阿里云 VPC 网段 100.64.0.0/10)
  • 指定从哪个头提取真实 IP:
    real_ip_header X-Forwarded-For;
  • 开启递归解析(剔除已知代理 IP,取第一个非代理 IP):
    real_ip_recursive on;
  • 配置生效后,$remote_addr 和 $realip_remote_addr 就是真实客户端 IP,可用于日志、限流、WAF 等场景。

后端服务必须主动读取 XFF,不能依赖 REMOTE_ADDR

无论 Nginx 是否还原了 $remote_addr,后端代码仍需按规范解析 XFF,因为:

  • 某些语言框架(如 Spring Boot、Express)默认不信任 XFF,需显式启用(如 server.forward-headers-strategy=framework);
  • PHP 中应使用 $_SERVER['HTTP_X_FORWARDED_FOR'] 并取逗号分割后的首 IP,而非 $_SERVER['REMOTE_ADDR'];
  • Java Servlet 中建议调用 request.getRemoteAddr() 前先检查是否启用了 RemoteIpFilter;
  • 务必校验 XFF 首 IP 是否为公网有效地址,过滤掉私有网段(如 127.0.0.1、192.168.x.x)以防伪造。

云环境或 Service Mesh 场景的特殊处理

在 ASM/Istio、阿里云 MSE 或腾讯云 TSE 等托管网关中,XFF 处理更依赖平台配置:

  • ASM 网关需设置 numTrustedProxies 注解,表示信任的代理跳数减一(例如 CDN + SLB + 网关 = 3 跳,则设为 2);
  • 若代理链路不固定(如混合公网/内网接入),应改用 trustedProxies 白名单方式,排除已知代理 IP 后取首个公网 IP;
  • F5 LTM、Citrix ADC 等设备需通过 iRules 或策略配置提取 XFF 首 IP,并写入新头(如 X-True-Client-IP)供后端直读。
PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

20

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

20

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

20

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

0

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

20

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

20

15

Golangci-lint安装与入门教程
Golangci-lint安装与入门教程

本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。

2026.10.22

20

15

PHP2Shell高危漏洞修复教程
PHP2Shell高危漏洞修复教程

PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。

2026.10.22

100

12

剧云人物设定与关系管理教程
剧云人物设定与关系管理教程

本专题介绍剧云人物设定与关系管理,讲解角色小传、性格职业、人物目标、背景资料和关系网络的创建及维护方法。

2026.10.22

20

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.9万人学习