stream { map $ssl_preread_server_name $targetBackend { yourdomian 127.0.0.1:8443; default $ssl_preread_server_name:443; } server { listen 443; proxy_connect_timeout 10s; proxy_timeout 10s; resolver 1.1.1.1; proxy_pass $targetBackend; ssl_preread on; } }复制代码
我来解释一下,该方法目前仅适用于中转tls的TCP流量。
服务器443端口链接获取到tls请求的sni值(也就是域名),赋值给$ssl_preread_server_name变量,然后又直接通过TCP转发到$ssl_preread_server_name对于的服务器443端口
河北省网友说:没看明白,解释下?
贵州省网友说:此时一位流着没有技术眼泪的MJJ路过。并表示很蒙B
青海省网友说:mark
吉林省网友说:万能青年旅店
山西省网友说:这个能做隐性转发吗?流量还不走中转机器上过
甘肃省网友说:巧了,刚好也是今晚了解到这个
补充两句,文档在这里 https://nginx.org/en/docs/stream/ngx_stream_ssl_preread_module.html
本质上是个sniproxy,用haproxy也可以实现,相比更复杂也更灵活一点,nginx 这个配置更简单些
湖南省网友说:MJJ连四层转发都不知道?我不信
台湾省网友说:正好要弄个这个。。
陕西省网友说:虽然本人看不懂,但是为你这种分享精神点赞。
陕西省网友说:就是四层转发啊,nginx stream模块
河南省网友说:有什么具体有意义的使用场景吗?