在四层代理中还原真实客户端ngx_stream_realip_module

news2025/6/12 22:24:39

一、模块原理与价值

  1. PROXY Protocol 回溯

    • 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。
    • Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息,并用 $realip_remote_addr$realip_remote_port 覆盖 $remote_addr$remote_port,下游模块获知真源地址。
  2. 兼容性

    • 对 TCP/UDP/UNIX Domain Socket(set_real_ip_from unix:)均可生效。
    • 同时支持 CIDR 方式批量信任,也可指定单 IP。
  3. 应用价值

    • 限流/黑名单:结合 limit_conn_zone $realip_remote_addr 而非代理 IP。
    • 日志真实化access_log 使用 $realip_remote_addr 记录客户端原始 IP。
    • 多层转发:当部署多级反代或自研网关时,只需在最前端开启 PROXY,即可保证中间层获得正确源地址。

二、指令解读

stream {
    # 1) 开启 PROXY Protocol 支持
    server {
        listen 12345 proxy_protocol;

        # 2) 定义可信代理网段
        set_real_ip_from 192.168.1.0/24;
        set_real_ip_from 2001:db8::/32; 
        set_real_ip_from  unix:;        # 信任本地 UNIX 域套接字

        # 3) 在此之后,$remote_addr/$remote_port 即为真实值
        proxy_pass backend;
    }
}
  • listen … proxy_protocol:必须在 listen 中开启,才会解析 PROXY 头。

  • set_real_ip_from:可多次使用,声明 信任来源,只有来自这些地址的连接才会替换。

  • 变量

    • $realip_remote_addr:保留头部中指明的客户端 IP;
    • $realip_remote_port:保留客户端端口;
    • 替换后,后续所有引用 $remote_addr 都取自 $realip_remote_addr

三、典型场景

  1. 限流与黑名单

    stream {
        limit_conn_zone $realip_remote_addr zone=ip:10m;
        server {
            listen 3306 proxy_protocol;
            set_real_ip_from 10.0.0.0/8;
            limit_conn ip 1;  # 单 IP 仅一条并发
            proxy_pass mysql-backend;
        }
    }
    
  2. 日志埋点

    stream {
        log_format realip '$realip_remote_addr:$realip_remote_port -> $server_addr';
        access_log /var/log/nginx/stream.log realip;
        server {
            listen 6379 proxy_protocol;
            set_real_ip_from 172.16.0.0/12;
            proxy_pass redis-backend;
        }
    }
    
  3. 多级代理链

    • 前端 LB → 中间网关 → Nginx Stream
    • 只在最外层 LB 输出 PROXY Protocol,后面层级都能拿到同一个真实源地址,无需在每层都开启。

四、进阶用法

  • 动态信任列表
    可结合 keyval 或 njs 动态更新 set_real_ip_from 段中 CIDR,例如根据 API 下发临时可信代理 IP。

  • 协议混合
    在同一实例可分 stream { server { listen 9000 proxy_protocol; … } } 和常规 TCP 端口并存,仅对指定端口生效。

  • 与 MQTT/HTTP 模块联动
    对于 TLS 透传 SNI(ssl_preread)或 MQTT 预读(mqtt_preread),将真实用户 IP 替换后再做鉴权或路由。

五、常见坑与排查

问题原因解决办法
$remote_addr 取到 LB IP未开启 proxy_protocolset_real_ip_from 未包含 LB 地址确认 listen … proxy_protocolset_real_ip_from 区段
IPv6 未生效忽略了 2001:db8::/32 之类 IPv6 段加入对应 IPv6 CIDR 或 ::/0(信任所有)
UNIX Socket 透传失败仅 TCP/UDP,需加 set_real_ip_from unix:指定 unix: 才信任本地套接字
多级反代仍然显示内网 IP中间层被覆盖,或上层未输出 PROXY 头确保最前层代理使用 PROXY Protocol v2,并全链路透传

六、结语

ngx_stream_realip_module 是构建 透明、可观测 四层网关的基石,可在不引入第三方组件的前提下可靠还原客户端真实源地址,为限流、鉴权、审计、灰度等上层功能提供准确数据。正确配置 proxy_protocolset_real_ip_from,即可让 Nginx 一线完成真实 IP 的回溯与替换,为复杂网络架构保驾护航。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2407712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…