OpenNJet 支持维护 Proxy_protocol V2
proxy_protocol_V2功能
背景
PROXY TCP4 192.168.0.1 192.168.0.11 56324 443\r\n GET / HTTP/1.1\r\n Host: 192.168.0.11\r\n \r\n
#define PP2_TYPE_ALPN 0x01 #define PP2_TYPE_AUTHORITY 0x02 #define PP2_TYPE_CRC32C 0x03 #define PP2_TYPE_NOOP 0x04 #define PP2_TYPE_UNIQUE_ID 0x05 #define PP2_TYPE_SSL 0x20 #define PP2_SUBTYPE_SSL_VERSION 0x21 #define PP2_SUBTYPE_SSL_CN 0x22 #define PP2_SUBTYPE_SSL_CIPHER 0x23 #define PP2_SUBTYPE_SSL_SIG_ALG 0x24 #define PP2_SUBTYPE_SSL_KEY_ALG 0x25 #define PP2_TYPE_NETNS 0x30
- 传递client的real ip(尤其是非http类的应用,http类可以用x-forward-realip等header传递)。
- 代理协议版本2 支持额外的TLV 字段。他可以被前端ssl协议卸载器转发客户端证书信息转发到后端非http 协议的后端服务器。VerneMQ MQTT 代理就是示例之一,它可以利用代理协议版本2,获取客户端的证书的详细信息,进行身份授权。
- 用于在K8s环境中,ingress 对非Http 协议的ssl 终止。
- GCP/amazon/arure 利用特定TLV 实现负载均衡。
2. 模块说明
3. 配置说明:
| 必填 | 配置说明 |
---|---|---|
proxy_protocol | 是 | 开启proxy_protocol |
proxy_pp2 | 是 | 开启proxy_protocol v2。 on 开启, off 关闭 |
proxy_pp2_set_tlv | 否 | proxy_pp2_set_tlv key value 格式。key 是 16 进制(两位,要避免和标准的冲突,)。 value 可以是常量,变量。例如:proxy_pp2_set_tlv 0x31 test; 获取:$proxy_protocol_tlv_0x31 前缀变量。注意:包含前面的源ip,目标ip,源端口,目标端口,以及tlv 值,总长度不能超过 4096 |
4. 应用实例
stream { server { listen 15006 ; njtmesh_dest on; #参考下面该指令的备注 proxy_protocol on; #开启protocol 功能 proxy_pp2 on; #开启protocol V2功能 proxy_pp2_set_tlv 0x41 $njtmesh_port; #设置tlv 字段名,以及值 proxy_pass 127.0.0.1:90; } }
Ingress policy的配置
http { server { listen 8086 proxy_protocol; server_name server-90; location /{ #todo: 其他的业务配置指令 proxy_pass 127.0.0.1:$proxy_protocol_tlv_0x41; } } }
5. 参考及致谢
- Open NJet同nginx一样,通过变量访问传递的信息, http://nginx.org/en/docs/http/ngx_http_core_module.html#var_proxy_protocol_tlv_
- nginx 商业版本有模块 https://nginx.org/en/docs/http/ngx_http_proxy_protocol_vendor_module.html ,可以解析云服务商如GCP/amazon/Azure的自定义TLV,用于更好的LB控制,但未见设置模块。
- 协议rfc参考: https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt
OpenNJet 最早是基于 NGINX1.19 基础 fork 并独立演进,具有高性能、稳定、易扩展的特点,同时也解决了 NGINX 长期存在的难于动态配置、管理功能影响业务等问题。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
MySQL 配置文件添加参数后服务起不来了
如何正确地向数据库添加配置参数。 作者:王雅蓉,DBA,负责 MySQL 日常问题处理和 DMP 产品维护。 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 本文约 1000 字,预计阅读需要 3 分钟。 背景信息 客户要将数据库数据迁移到 DMP 平台上,需要根据源库的配置修改相应参数(例:lower_case_table_names=0),但发现在配置文件添加好参数后数据库起不来了。 mysql-error.log ........... 2023-08-23T15:22:01.554471+08:00 0 [Note] Plugin 'FEDERATED' is disabled. 2023-08-23T15:22:01.557909+08:00 0 [Note] Semi-sync replication initialized for transactions. 2023-08-23T15:22:01.557926+08:00 0 [Note] Semi-sync replication enabled on the master. 2023-0...
- 下一篇
OpenSergo & Dubbo 微服务治理最佳实践
01 Why 微服务治理? 现代的微服务架构里,我们通过将系统分解成一系列的服务并通过远程过程调用联接在一起,在带来一些优势的同时也为我们带来了一些挑战。 如上图所示,可以看到词云中所展示的都是目前微服务架构在生产上所遇到的挑战。比如,最常见的流量激增的场景,近一年内 AIGC 突然爆火,相关网站/服务都存在过因为激增流量导致服务不可用的情况,可能会让我们错过一个最佳的增长窗口。 再比如缺乏容错机制,某视频网站的某个服务异常,随调用链扩散,导致全站入口不可用,影响千万用户,产生实质性的经济损失。这些生产故障频频发生,也是在提醒我们稳定性是用好微服务的重大挑战之一。 为了保障微服务的稳定性,我们就需要做一些架构的演进。 我们先看一下左侧的微服务 3 大件,这个大家已经很熟悉了,通过这三者的配合,我们的应用就能够正常使用了,但是距离生产可用其实还有很大一段距离,各个企业和社区为了消除这其中的距离都有一些探索和实践,比如 Dubbo 社区在 Dubbo3 中引入一系列诸如流量管理、高可用性的能力来保障微服务的稳定性,这些措施可以统称为微服务治理。 所以其实可以看出大家已经意识到,从把微服务跑...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Mario游戏-低调大师作品
- CentOS7安装Docker,走上虚拟化容器引擎之路