https://github.com/fffonion/lua-resty-multiplexer
实现了一个端口服务复用的透明代理,可以在同一个端口上运行多个协议。根据每次连接中客户端发起的首个请求检测协议,根据协议或各种条件选择代理的上游。
需要打一个补丁。由@fcicq在这个讨论中贡献。这个补丁实现了 BSD 的 socket recv()语义。目前官方也有这个 feature 的PR。
欢迎讨论和拍砖: )
说明
- 理论上只能实现识别连接建立后客户端先发送请求的协议,目前实现了 http, ssh, dns, tls, xmpp。不兼容服务端先发送响应的协议。
- 如果实现了 ngx.reqsock.peak(),则可以使用 ngx_stream_proxy 来转发流量,这样的话除了首个请求以外同一连接的后续请求将没有额外的性能损失;目前只能在 Lua 层转发。对于peak 的实现也欢迎讨论。