Nginx TCP流反向代理配置真实客户端IP的正确方法
Nginx Stream代理传递真实客户端IP的正确配置
错误原因分析
你遇到的报错源于两个核心问题:
set_real_ip_from是HTTP模块专属指令,无法在stream块中使用;- 即便在支持的模块中,
set_real_ip_from的参数必须是具体IP地址/网段,不能传入变量(如$proxy_protocol_addr)。
正确配置方案
根据后端服务是否支持PROXY协议,分两种场景配置:
场景1:后端服务(127.0.0.1:5555)支持PROXY协议
直接简化配置,跳过中间转发层,让前端Nginx直接向后端发送带PROXY协议的流量:
stream { server { listen <IP>:3333; proxy_pass 127.0.0.1:5555; proxy_protocol on; } }
后端服务可通过解析PROXY协议头直接获取真实客户端IP。
场景2:后端服务不支持PROXY协议
需使用Nginx的ngx_stream_realip_module模块(编译时需包含--with-stream_realip_module,可通过nginx -V验证编译参数),配置如下:
stream { # 接收外部流量,向中间层发送PROXY协议 server { listen <IP>:3333; proxy_pass 127.0.0.1:4444; proxy_protocol on; } # 解析PROXY协议,替换源IP后转发给后端 server { listen 127.0.0.1:4444 proxy_protocol; # 指定可信的PROXY协议发送方(此处为本地中间层IP) set_real_ip_from 127.0.0.1; # 从PROXY协议头提取真实客户端IP realip_header proxy_protocol; proxy_pass 127.0.0.1:5555; } }
此配置会让中间层Nginx解析PROXY协议头中的真实IP,替换连接的源IP后再转发给后端,后端即可直接获取真实客户端IP。
内容的提问来源于stack exchange,提问作者Petr Javorik
相关产品推荐
相关产品推荐

