我们正在运行一台相当强大的专用服务器,该服务器配备 Xeon CPU、32GB RAM 和 RAID SSD,运行 Centos 6。然而,我们仍然看到 HTTPS 使我们的页面下载时间增加了 100 多毫秒。我们能做些什么来将速度提高 20 毫秒?
以下是 Apache 设置:
SSLHonorCipherOrder on
SSLRandomSeed startup file:/dev/urandom 512
SSLRandomSeed connect file:/dev/urandom 512
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-EC$
SSLProxyCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECD$
SSLProtocol all -SSLv3 -SSLv2
SSLProxyProtocol all -SSLv3 -SSLv2
SSLPassPhraseDialog builtin
SSLSessionCache "shmcb:/var/run/ssl_scache(5120000)"
SSLSessionCacheTimeout 300
SSLUseStapling On
SSLStaplingCache "shmcb:/var/run/ssl_stapling(128000)"
SSLStaplingReturnResponderErrors off
SSLStaplingStandardCacheTimeout 3600
SSLStaplingErrorCacheTimeout 600
SSLStaplingResponderTimeout 5
答案1
尽管有各种说法称 HTTPS 会减慢您的网站速度,但事实并非如此。这是因为客户端和服务器需要协商 SSL/TLS 密码才能启动。然而后对于大多数网站来说,这种速度减慢可以忽略不计,而且 SSL 可以带来巨大的好处。
此外,默认值为 http,因此当有人进入仅支持 https 的站点时,需要重定向到 https 版本,从而导致另一次往返。
对于初始连接来说,100 毫秒的减速其实不算太严重,正如我所说,之后连接就会建立,因此不会出现减速。因此首先,虽然初始连接速度很重要,但浏览网站也很重要,此时你不应该受到 100 毫秒减速的影响。
您的 SSL/TLS 配置实际上看起来相当不错,无论是在安全性还是性能方面。您使用的是现代且快速的密码和套件(尽管您的密码套件仅对新浏览器有严格限制,如果这是故意的,那么您也可以关闭 TLSv1 和 TLSv1.1),设置了 SSL 缓存(以避免客户端为每个连接重新协商 SSL 会话),并设置了 SSL 装订(以避免客户端额外查找以检查证书的有效性)。
不过我可以提出以下一些建议。这些建议可能会减少使用 https 的影响,但不会减少最初的 100ms 连接延迟:
确保服务器的 Keep-Alives 已打开(默认情况下应为打开状态,但最好仔细检查)。你应该确保你做到了不是在响应中看到“Connection: close”标头。如果没有 Keep-Alives,您的 SSLCache 就毫无意义。
将您的 SSLSessionCacheTimeout 从 300 秒或 5 分钟增加。如果您在网站上浏览,您很容易超出该时间。您已经限制了 SSLSessionCache 的大小,因此将此超时时间增加到更高的值也无妨。
实施 HSTS 以告知浏览器您的网站始终首选 https(即使用户在浏览器地址栏中未输入任何协议 - 或者即使他们输入 http)。这将保存初始重定向。
HTTP/2 将有助于提高 https 连接速度,因为您不再使用并行连接,但更重要的是,它将以其他方式提高性能。不过,它对于 Apache 来说仍然是实验性的(不过在我看来已经足够稳定了)。
我还建议您定期通过以下方式运行您的服务器https://www.ssllabs.com/ssltest/index.html测试您的 SSL/TLS 配置,因为随着新漏洞的发现,该领域的情况不断发生变化。
答案2
您可以启用 HTTP/2,这将减少兼容浏览器的连接数,从而减少页面加载时间。但这不会减少该连接的延迟。演示这里。
也可以看看这个问题- 在这种情况下,延迟是关键。我对位于澳大利亚悉尼的 https 服务器进行了速度测试。从另一台悉尼服务器测试时,SSL 握手时间为 46 毫秒,从美国的 EC2 测试时,则为 213 毫秒。差异是由于往返数据包时间,此外,即使延迟为零,也有一些不可避免的开销。我不知道这个强制延迟是多少,但您可能可以通过实验来解决这个问题。
您是从靠近服务器的客户端进行测试的,还是从远离服务器的客户端进行测试的?ping 值是多少?另一个有用的页面围绕 https 握手。100ms 对于 https 来说可能并不算太糟糕的开销。
可能有人会推荐一些 Apache 调整。如果您发布您的网站链接,有人可能会看一看。
答案3
这不是一个好答案,但如果你在优化 SSL 之前愿意了解它的工作原理,这里有一个快速 HTTPS 清单:
- ECDSA 证书
- 熵源
- TLS1.2 协议
- 硬件支持的密码套件:AES-NI
- SSL 会话缓存
- OCSP 装订
- HTTP/2
我所有与服务器相关的知识都发布在这个存储库中https://github.com/szepeviktor/debian-server-tools
一切顺利!