Nginx 反向代理:IP透传(IP Passthrough)的几种方案介绍
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
扩展:IP透传(IP Passthrough)的几种方案引言:在现代网络架构中,负载均衡是保障系统高可用性和性能的关键组件。然而,在负载均衡的默认工作模式下,后端服务器接收到的请求源IP地址通常是负载均衡器的IP地址,而非客户端的真实IP地址,这种行为虽然简化了网络通信流程,但会对某些业务场景(如日志审计、安全防护、数据库连接管理等)造成不便。因此,源地址透传(Source IP Passthrough)成为负载均衡配置中的核心需求之一,这也凸显了 IP 透传的重要性,在某些场景中获取用户真实IP地址对安全策略和上游服务处理至关重要。 下面作者简单介绍一下,当下主流的几种IP透传方案:Proxy Protocol 协议、修改 IP 报文、DSR 方案。其中 Proxy Protocol 方案在 Nginx 作为四层反向代理时已经实践过了,接下来简单讲解修改 IP 报文和 DSR 方案的实现。 IP报文修改原理,修改 IP 报文中的源地址,以及修改路由规则,使其指向负载均衡器或客户端,若按此又细分为两种方案:
IP报文修改:由 Nginx 返回响应 给客户端 IP报文头部包含 source IP 和 destination IP,修改 source IP 为客户端真实IP(A),使上游服务可直接获取,处理完毕后在回程路径中,必须修改上游服务所在主机的路由规则,使其网关指向 Nginx 所在机器(B),通过 Nginx 转发响应给客户端。 步骤如下:
![]() 简单配置如下:
IP报文修改:由 上游服务器 直接返回响应 给客户端 同样,IP报文头部包含 source IP 和 destination IP,在 Nginx 代理服务器中修改 source IP 为客户端真实IP(A),使上游服务可直接获取到客户端真实IP(A),处理完毕后,上游服务器将网关指向B,从而将目标地址设置 A 的响应数据包,由于上游服务器不具备连接外网能力,此时返回给 Nginx 代理服务器主机上,不同于第一种方案,此处不经过 Nginx 用户态进程处理,而由内核根据配置 iptables 规则进行转发,在 netfilter OUTPUT 链中直接转发报文至A,以转发 udp 四层数据包给客户端为例: ![]() DSR 方案 实际上 DSR 方案与 IP 报文修改类似,但略有不同。DSR(Direct Server Return)是一种负载均衡技术,它允许上游服务器直接将响应数据包发送回客户端,而无需通过 Nginx 代理服务器。在这种模式下,Nginx 主要负责接收请求并将其转发给上游服务器,但不直接参与响应的转发。 DSR 方案的核心在于上游服务可直连客户端(有公网IP),Nginx 在转发请求给上游服务器时,会将目标地址设置为客户端的真实 IP(A),而不是 Nginx 的监听 IP。这样,当上游服务器处理完请求并准备返回响应时,它会将数据包直接发送回原始的客户端,但是回包时仍需将source IP改回B(Nginx地址),否则后续请求可能绕过NGX,从而导致负载均衡失效。 ![]() 但是此种方法存在一定的缺陷,一是 NGX 无法监控上游服务是否正常返回响应,二是当响应不经过NGX,则无法检测上游异常,影响健康检查与故障转移,导致负载均衡策略受限,难以实施动态权重调整或熔断机制。 好了,这里我们简单的了解了 Nginx 作为四层反向代理的几种 IP 透传方案,但是由于作者的场景有限,且一般情况下很少遇到在四层反向代理中需要使用非 Proxy_Protocol 协议透传 IP 的场景,因此并未深入实践,等后续作者遇到此类场景时,再做进一步实践吧。 至此,我们本章学习 stream 四层反向代理的相关知识,对比前面学习的 HTTP 反向代理,我们发现 Nginx 作为四层反向代理同样强大。在处理TCP和UDP协议时,Nginx提供了灵活的配置选项,如负载均衡、会话管理、健康检查等,当下Nginx 不仅适用于普通Web服务,更在现代微服务体系中承担关键角色,深入掌握其四层代理与IP透传能力,有助于构建高性能、高可靠的服务网关。 阅读原文:https://mp.weixin.qq.com/s/Phf9QIcymJrqnAdEN2hkqQ 该文章在 2026/2/9 12:57:10 编辑过 |
关键字查询
相关文章
正在查询... |