回答
收藏
分享
举报
ssl_preread会影响nginx进行TLS向上游TCP服务端流量转发过程吗?
提问于2023-01-20 11:00

浏览 1.6k

文章标签

最近我在一个项目中遇到一个需求,从TCP的8185端口接收TLS流量,然后根据TLS ClientHello中的server name将TLS流量转发至不同的上游TCP服务端程序,对应的nginx配置为:

 stream {
     map $ssl_server_name $stream_map {
    	aby3_task_1 upstream_task_1;
    	aby3_task_2 upstream_task_2;
     }
 
     upstream upstream_task_1 {
 	    server 127.0.0.1:1313;
     }
 
     upstream upstream_task_2 {
 	    server 127.0.0.1:1314;
     }
 
     server {
 	    listen 8185 ssl;
 	    ssl_certificate /home/zxy/nginx-cfg/cert/server1.crt;
 	    ssl_certificate_key /home/zxy/nginx-cfg/cert/server1.key;
 	    proxy_pass $stream_map;
 	    proxy_ssl off;
	    #ssl_preread on;
     }

     error_log /etc/nginx/logs/error.log debug;
  

}

我们在测试的时候发现,如果在nginx的server块中加入ssl_preread on,TCP服务端接收不到任何内容;如果将ssl_preread on注释掉,即把ssl_preread配置为off,就可以进行正常通信。一开始我们没有注意到ssl_preread on这个配置会有这么大的影响,我同事偶然把这个ssl_preread on注释了,发现可以正常进行转发了。

我们尝试探索了为什么关闭ssl_preread就能够正常进行转发,我们让nginx把debug日志给打印出来了,对比日志之后发现有一处是不一样的,如下图所示:

左侧是转发成功的日志,右侧是转发失败的日志,我们发现转发成功的日志中包含proxy connection handler这行日志而转发失败的日志中没有,我们想通过日志去源码中寻找原因,奈何源码太复杂,投入了几天时间没有结果。

想请教各位大神,为什么开启ssl_preread之后,会影响nginx向上游TCP转发TLS流量?

已修改于2023-02-13 18:13



写下您的回答
发表回答
全部回答(0)

按点赞数排序

按时间排序

提问者
3455418dcmg
这家伙很懒还未留下介绍~
0
文章
1
问答
0
粉丝
相关问答

options请求?需要跨域访问? 

点赞 0
浏览 7.8k

sticky模块只能在linux下吧,win下没有。tomcat好像有个session复制吧,或者可以用共享session。

点赞 0
浏览 7.7k

没办法完全不受影响的,因为mirror是子请求,当子请求未结束时,主请求消耗的内存至少是无法释放的。你可以尝试在/mirror里,把超时时间大幅度调低,包括connect/read/send,再压下看看。

点赞 0
浏览 10.4k