Nginx 配置 TCP 代理支持透明地转发客户端真实 IP

冰川箭仙

冰川箭仙

2026-07-28

312人浏览

原创

Nginx Stream模块实现TCP透明转发透传源IP的唯一可行方案是启用proxy_protocol:一、listen后加proxy_protocol参数;二、配置set_real_ip_from指定可信代理网段;三、上游服务必须支持PROXY协议解析,否则连接异常或IP显示为Nginx本机地址。

nginx 配置 tcp 代理支持透明地转发客户端真实 ip

Nginx 本身无法实现网络层意义上的“透明代理”——即不改写原始目的 IP、在内核层面截获并转发流量。所谓“TCP 透明转发 + 透传真实 IP”,实际是指在四层代理中尽可能保留客户端源 IP,并让后端服务能可靠识别它。这需要 stream 模块配合 proxy_protocol 协议,且依赖下游服务主动解析,不是开个开关就能自动生效。

用 proxy_protocol 传递真实客户端 IP

这是最常用也最可行的方式。Nginx 在 TCP 层无法直接把 $remote_addr 写进原始包头,但可以通过 PROXY 协议在连接建立初期,以明文方式在 TCP 数据流开头插入一段标识客户端地址的头部(如 PROXY TCP4 192.168.1.100 10.0.2.5 34292 443)。

  • 必须在 Nginx 的 stream 块中启用:proxy_protocol on;
  • 后端服务(如另一台 Nginx、HAProxy、或自研服务)必须支持并开启 PROXY 协议解析,否则会把这段头部当作非法数据丢弃或报错
  • 如果后端是 Nginx,需配置:set_real_ip_from(指定可信代理地址)+ real_ip_header proxy_protocol,才能让 $remote_addr 正确取值

确保 Nginx 编译时启用了 stream 模块

很多发行版预装的 Nginx 默认不带 stream 支持。运行 nginx -V 2>&1 | grep -o with-stream 检查是否启用。

  • 若无输出,需重新编译:configure 时加 --with-stream --with-stream_realip_module
  • stream_realip_module 是解析 PROXY 协议所必需的,否则 set_real_ip_from 不生效
  • 配置位置必须与 http{} 同级,不能嵌套在 http 块里

典型 TCP 透传配置示例

以下是一个监听 8080 端口、转发到内部 MySQL 实例,并透传客户端 IP 的 stream 配置:

Nginx
Nginx

在宝塔面板中轻松管理Nginx高性能Web服务器。提供可视化配置反向代理、负载均衡、SSL证书及HTTP缓存功能,一键优化高并发性能,助您高效搭建稳定、快速的网站运行环境。

下载
stream {
    upstream mysql_backend {
        server 10.10.20.5:3306;
    }
<pre class="brush:php;toolbar:false;">server {
    listen 8080;
    proxy_pass mysql_backend;
    proxy_protocol on;
    proxy_timeout 1h;
    # 可选:记录日志便于排查
    access_log /var/log/nginx/stream-access.log proxy;
}

}

注意:proxy_protocol on 只负责发,不负责收;后端必须能收并解析,否则连接可能失败或 IP 显示为 Nginx 本机地址。

为什么不能靠 X-Forwarded-For?

X-Forwarded-For 是 HTTP 协议头,仅适用于七层(HTTP/HTTPS)代理。 TCP 代理没有请求头概念,所以该字段对 MySQL、Redis、SMTP 等纯 TCP 服务完全无效。强行在 stream 块里写 proxy_set_header 会报错或被忽略。

  • HTTP 场景用 proxy_set_header X-Real-IP $remote_addrX-Forwarded-For
  • TCP 场景唯一标准方案就是 PROXY 协议,别无替代
  • 若后端不支持 PROXY 协议,只能改服务代码或加一层兼容代理(如 HAProxy 做中间桥接)

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

355

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

617

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

1215

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

428

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

324

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

190

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

1031

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

1847

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

322

5

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

nginx手册
nginx手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习