如何在nginx中使用proxyprotocol协议?

,打扰一下,如何在nginx中使用proxyprotocol协议?
最新回答
秋天の童话

2024-09-12 03:06:53

NGINX在云原生演进中采用All in OpenNJet策略,以优化性能与管理。

代理协议(Proxy protocol)版本V2功能强大,包括V1与V2两个版本,V1可读性强,V2为二进制格式,支持可扩展的TLV功能。

代理协议V1格式简明,用于包含协议栈、源IP、目的IP、源端口、目的端口等信息。一个典型的V1协议头如下:

PROXY 协议栈 源IP 目的IP 源端口 目的端口 rn

而V2版本通过二进制格式提高解析效率,且支持添加特定扩展属性。

代理协议常见应用于需要获取用户真实IP场景,如在复杂网络环境中。

OpenNJet在NGINX v1版本基础上实现了V2协议的发送与解析,并支持自定义TLV功能。

配置与应用说明主要集中在Stream模块中,该配置在NGINX配置文件中生效。

OpenNJet在K8s环境下的应用实例展示了v2协议传递原始目的地址的过程:

1. 客户端通过域名访问服务,如“api.test.com:8080”,请求被发往对应服务的IP。

2. 防火墙重定向请求至本地监听的sidecar进程。

3. sidecar作为4层代理识别HTTP流量并转发至本地egress policy。

4. egress policy挑选合适的后端IP(如10.0.30.1或10.0.30.2),连接并发送请求。

5. 防火墙记录原始目的端口信息于IP包头的TCP选项中。

6. ingress process分析请求后转发至ingress policy。

7. ingress policy通过标准NJet变量方式获取防火墙记录的原始目标信息。

解决方案涉及Ingress sidecar在发送请求至ingress policy时利用代理协议传递原始目标信息,通过此过程ingress policy能获取到原始端口与IP。

配置细节包括Ingress sidecar与ingress policy的NJet指令配置,如njtmesh_dest用于获取目标信息。

OpenNJet基于NGINX1.19进行独立演进,提供高性能、稳定与易于扩展的特性,同时解决NGINX配置动态化与管理功能影响业务的问题。

参考与致谢中提及了OpenNJet的起源、特性与演进方向,涉及邮件组与官方网站。