Nginx开启SSL会话复用,能提升多少性能?

服务器
TLS通过复用ssl来优化TLS连接过程,tls的复用由服务端决定是否可复用,包括session的过期时间,在nginx中,通过开启ssl_session_cache来开启缓存和复用,性能提升40%。

[[395721]]

之前专门写过如何优化你的https,里面总结了几点Nginx下优化HTTPS的方法,最后有两点小的建议,没有详细说明,最近在群里看到朋友发的Nginx配置文件,只配置了证书和密钥部分,所以觉得有必要再把这些刨析一下

上图是Nginx官网文档中,关于ssl_session_cache的介绍,ssl_session_cache,就是缓存ssl会话状态的缓存,它有4种模式可选,分别是:

off:严格的禁止使用会话缓存

none:宽松的禁止使用会话缓存,即虽然nginx不说不允许使用会话缓存,但实际不会将会话缓存下来

builtin:openssl的内置缓存,只有一个工作进程可以使用该缓存,官方指出,内置缓存,会导致内存碎片

shared:共享缓存,所有worker进程共享

这条配置,能带来多大的性能提升?我们抓包看

首先实验环境Nginx只配置了证书和密钥,通过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缓存复用,整个过程如下:

客户端Client Hello的时候,会带一个Session ID,如果6769号包中

服务端和客户端协商建立连接,确认Session ID

然后客户端将Session ID保存在本地,再次发起连接的时候,Client Hello会带上这个ID

因为服务端开启了ssl_session_cache,则在缓存中查找对应的Session ID,如果存在则接受并恢复会话,返回相同的Session ID

如果在缓存中,未找到对应的Session ID,则转换成完整的TLS握手

缓存的时间由ssl_session_timeout决定,默认是5分钟

总结:

 

TLS通过复用ssl来优化TLS连接过程,tls的复用由服务端决定是否可复用,包括session的过期时间,在nginx中,通过开启ssl_session_cache来开启缓存和复用,性能提升40%

本文转载自微信公众号「运维研习社」,可以通过以下二维码关注。转载本文请联系运维研习社公众号。

 

责任编辑:武晓燕 来源: 运维研习社
相关推荐

2017-03-06 09:26:56

Nginx服务器 SSL

2020-03-03 22:15:58

byobuSSH会话Linux

2013-08-03 17:59:37

Nginx

2019-01-08 13:32:38

Nginx服务器IO复用

2020-07-21 15:40:55

NginxJava服务器

2023-10-31 09:02:50

2014-12-16 12:50:06

网络VDI

2020-12-28 12:06:42

Ruby 3编程语言优化

2017-12-13 13:09:36

NginxWeb应用

2024-03-26 12:08:20

加密NginxHTTP

2021-10-25 10:23:49

Webpack 前端Tree shakin

2014-04-30 15:36:05

2017-07-14 10:51:37

性能优化SQL性能分析

2022-03-21 12:45:28

Java线程代码

2022-02-09 08:49:37

架构

2021-09-27 08:16:38

Webpack 前端Cache

2023-04-10 09:15:25

Vite 4.3SWC 插件

2013-05-22 09:38:03

GoGo语言Go性能

2020-10-09 17:43:25

计算机CPU技术
点赞
收藏

51CTO技术栈公众号