我最近从 GeoTrust 购买了 QuickSSL 证书,并在 NGINX 上使用它。一切都很好,但在页面实际加载之前有一秒钟令人讨厌。
如果我查看其他 SSL 网站,其中大多数都可以立即加载。
这是我的 SSL 配置:
ssl on;
ssl_certificate /usr/local/nginx/ssl/www.crt;
ssl_certificate_key /usr/local/nginx/ssl/www.key;
我找到了ssl
在指令末尾添加的方法listen
,但并没有解决问题。
为了重现此问题,我必须关闭网站并稍后重新访问(大约 15 分钟?)。
答案1
SSL 握手是一个缓慢的 3 数据包事件。这意味着初始连接将比非 SSL 连接花费更长时间 - 通常长 3-4 倍。后续请求将使用来自第一个连接的 SSL 会话,并且速度会更快,但前提是会话保持活动状态。
ssl_session_cache
您可以通过设置和来控制 NGINX 中 SSL 会话的生命周期ssl_session_timeout
。
编辑:刚刚注意到我已经解释了为什么会发生这种情况,但没有解释你能做些什么。遗憾的是,答案是很少。初始握手需要多长时间取决于两个因素:实际 SSL 加密所花费的时间(对于当前硬件来说可以忽略不计)和 3 个数据包交换所花费的时间(这仅取决于网络)——除非你可以让服务器获得“较低的 ping”,否则什么都不会改变。
答案2
这听起来很像您打开了 SSL 会话缓存(等待 15 分钟才会使问题重新出现),并且您和服务器之间的 CPU 速度非常慢或网络路径非常潜在,从而导致了问题。