当前位置: 首页 > 科技观察

Nginx启用SSL会话多路复用后可以提高多少性能?

时间:2023-03-13 17:14:01 科技观察

之前写过如何优化你的https。总结了一些在Nginx下优化HTTPS的方法。最后有两个小建议,没有详细解释。最近在群里看到一个朋友发来的Nginx配置文件。只配置了证书和密钥部分,所以我觉得有必要再分析一下这些。上图是Nginx官网文档中对ssl_session_cache的介绍。ssl_session_cache是缓存SSL会话状态的缓存。分别是:off:严格禁止使用sessioncachenone:松散地禁止使用sessioncache,即nginx虽然没有说不允许sessioncache,但实际上不会缓存sessionbuiltin:openssl的内置缓存,只有一个工作进程可以使用这个缓存。官方指出内置缓存会造成内存碎片。通过wireshark抓包可以看到完整的连接过程,无需配置ssl_session_cache。三向握手完成后,建立TLS连接,交换证书,验证证书。详细的TLS连接过程可以参考另一篇文章《Wireshark抓包帮你理清HTTPS请求流程》,这里不多说,建立TLS连接的完整过程总结如下:然后我们在Nginx中打开ssl_session_cache,重新抓包可以看到一个简单的TLS握手包已经完成。完成3个TLS后,建立连接,传输数据,简单的TLS连接过程总结如下:可以看出,短TLS链路比全TLS链路少了一个往返。如果使用50ms的TTL,那么一条链路可以节省100ms,效率提升40%。缓存是如何实现的?在nginx中设置ssl_session_cache后,开启TLS缓存多路复用。整个过程如下:当客户端ClientHello时,会带上一个SessionID。如果server和client在6769包中协商建立连接,确认SessionID,然后client发送SessionID,SessionID保存在本地。再次发起连接时,ClientHello会带上这个ID,因为服务器启用了ssl_session_cache,然后在缓存中查找对应的SessionID,如果存在,接受并恢复会话,返回相同的SessionID。在缓存中,如果没有找到对应的SessionID,则会转为完整的TLShandcache的时间由ssl_session_timeout决定,默认5分钟ssl_session_cache开启缓存和多路复用,性能提升40%本文转载请联系运维院公众号。