You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx的stream层哪个变量存储了请求的目标IP地址?

Nginx stream层获取请求目标IP的方案

直接使用ngx_stream_core_module内置的$server_addr变量即可获取到L3层的目标IP,对应你示例请求中--resolve参数指定的192.0.2.17。

变量说明

  • $server_addr 是stream核心模块的原生内置变量,无需额外加载第三方模块即可直接使用,返回值为当前连接所命中的Nginx监听套接字绑定的IP地址
  • 搭配内置变量$server_port可以同时获取到目标端口信息
  • 该变量在TCP连接建立完成后即可读取,生效时机早于读取SNI的$ssl_preread_server_name变量,不依赖SSL握手流程

配置示例

stream {
    log_format stream_access '$remote_addr $remote_port -> $server_addr:$server_port SNI: $ssl_preread_server_name';
    access_log /var/log/nginx/stream_443_access.log stream_access;

    server {
        listen 443;
        ssl_preread on;
        # 后续代理逻辑
    }
}

特殊场景说明

如果你的Nginx前端还有其他网络设备做了DNAT转发,需要获取DNAT转换前的原始目标IP,需要满足以下任意一个条件:

  • 前端设备开启Proxy Protocol协议传递原始地址信息,Nginx侧监听配置加proxy_protocol参数,通过$proxy_protocol_addr变量读取
  • 服务器内核开启TPROXY透明代理功能,配合对应规则可通过自定义变量获取原始目标地址

内容的提问来源于stack exchange,提问作者Jarvis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:45:05