讲师中心 微信公众号
AI工具推荐 视频效率加速

如何通过 proxy_set_header 修正反向代理中后端应用获取的真实客户端 IP

小浩吖_8114

小浩吖_8114

发布时间:2026-04-30 21:16:00

|

1000人浏览过

|

来源于php中文网

原创

Nginx反向代理下后端获取真实IP需三者协同:Nginx配置proxy_set_header传递X-Real-IP和X-Forwarded-For头,后端框架(如Django、Flask、Express)启用代理头解析,并严格限定trusted_proxies可信代理网段,缺一不可。

如何通过 proxy_set_header 修正反向代理中后端应用获取的真实客户端 ip

在 Nginx 反向代理场景下,后端应用(如 Flask、Django、Node.js)默认收到的客户端 IP 是 Nginx 所在服务器的内网地址(比如 127.0.0.1 或 10.x.x.x),而非真实访问用户的公网 IP。这是因为 TCP 连接由 Nginx 与后端建立,原始请求被终止并重建。要让后端拿到真实 IP,关键不是只靠 proxy_set_header,而是**Nginx 正确传递 + 后端可信解析 X-Forwarded-For 等头 + 安全校验来源**,三者缺一不可。

正确配置 proxy_set_header 传递客户端信息

Nginx 需主动把客户端真实 IP 和代理链路写入 HTTP 请求头,发给后端。最常用且推荐的组合是:

  • X-Real-IP:只设为客户端最外层真实 IP(适合简单单层代理)
  • X-Forwarded-For:追加客户端 IP,并保留原有值(支持多级代理链路)
  • X-Forwarded-Proto:告诉后端原始请求是 http 还是 https(影响 URL 生成)

示例配置:

location / {
  proxy_pass http://backend;
  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 $scheme;
}

注意:$proxy_add_x_forwarded_for 会在原有 X-Forwarded-For 值后追加 $remote_addr;如果上游没有该头,就只设 $remote_addr —— 这比硬写 $remote_addr 更健壮。

Nginx Reverse Proxy
Nginx Reverse Proxy

配置 Nginx 反向代理,实现域名绑定。用户说“绑定域名”“配置 Nginx”“反向代理”时触发,将域名绑定到指定 IP:端口。

下载

后端必须启用并信任对应头字段

仅 Nginx 发送头没用,后端框架需明确开启“从代理头读取客户端 IP”的功能,且**必须限定只信任来自可信代理的请求**,否则可能被伪造。

  • Django:设置 SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https'),并配置 USE_X_FORWARDED_HOST = True、USE_X_FORWARDED_PORT = True;更重要的是,通过 SECURE_PROXY_SSL_HEADER 和 TRUSTED_PROXIES(Django 4.2+)或中间件限制可信代理 IP 段
  • Flask(配合 Werkzeug 2.2+):使用 ProxyFix 中间件,指定 trusted_hosts(如 ['127.0.0.1', '192.168.0.0/16'])和 x_for=1 表示信任第一级 X-Forwarded-For
  • Node.js(Express):用 app.set('trust proxy', ['127.0.0.1', '10.0.0.0/8']) 显式声明可信代理网段,之后 req.ip 才会自动解析 X-Forwarded-For

不设可信代理列表就直接读 X-Forwarded-For,等于把伪造 IP 的入口完全敞开。

避免常见陷阱:IP 被覆盖、伪造、日志错乱

以下问题高频出现,本质都是未区分“连接来源”和“原始来源”:

  • 后端日志显示全是 127.0.0.1:Nginx 没配 proxy_set_header X-Real-IP 或后端没启用代理头解析
  • 日志里 IP 变成内网地址(如 172.18.0.1):Nginx 与后端容器通信走的是 Docker 网络,此时 $remote_addr 是容器 IP;应改用 $http_x_real_ip 或确保 Nginx 在宿主机网络模式运行
  • X-Forwarded-For 出现多个 IP,取错位置:例如 X-Forwarded-For: 203.0.113.5, 198.51.100.3,其中前者是用户真实 IP,后者是上一级代理 IP;后端必须按“最左非可信 IP”逻辑取值,且依赖 trusted_proxies 列表跳过已知代理
  • HTTPS 页面混入 HTTP 资源:没传 X-Forwarded-Proto,后端生成链接时误判协议

验证是否生效:分步检查

不要只看后端日志,逐层确认:

  • 在 Nginx access_log 中加 $http_x_forwarded_for 和 $remote_addr 字段,确认进来的请求头含真实 IP
  • 用 curl -H "X-Forwarded-For: 1.2.3.4" http://yourdomain/ 测试后端是否返回 1.2.3.4 —— 若返回,说明未校验代理可信性,存在安全风险
  • 查看后端实际收到的请求头(如 Django 的 request.META 或 Express 的 req.headers),确认 X-Real-IP 和 X-Forwarded-For 存在且合理
  • 用公网设备访问,对比 Nginx 日志中的 $remote_addr(应为你的公网 IP)与后端记录的 IP 是否一致

热门AI工具

更多
Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2883

2023.08.11

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

7170

2024.03.19

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

6706

2024.03.19

nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

423

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

4067

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

6925

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

601

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1516

2024.07.09

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

20

2026.11.05

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
DBeaver数据库连接指南
DBeaver数据库连接指南

共0课时 | 0人学习

Docker Desktop设置与维护手册
Docker Desktop设置与维护手册

共0课时 | 0人学习

LLVM官方文档
LLVM官方文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn