SSL 慢。建立安全连接花费的时间太长
SSL slow. Establishing secure connection taking too long
我在 Hetzner 上有一个 256GB RAM
6 CPUs (12 Threads)
的专用服务器,它位于德国。我有 CENTOS 7.5。 EA4.
我的问题是 SSL。每天大约 2 小时,我们在一秒内有 40 个请求,完成请求大约需要 20 秒.非 SSL 需要 0.5 或更少。 Here 是一个例子。
从 13:00 到 15:30 (UTC+4),SSL 请求花费的时间最多。当您使用 SSL 和不使用 SSL 打开 this link 时,问题很明显。
我有可用的 WHM。我注意到 ModSecurity 并想知道这是否可能是问题所在。我已经应用了提供的大部分设置 here,但是关于 SSL 的设置并不多。
如果证书是所有这一切的原因:
到目前为止我无法重现您的问题。 WebPageTest reports are all good and pretty. 考虑到您启用了 OCSP 装订,SSL 协商在预期的 100-200 毫秒内。否则在 IE 下会花费更长的时间。可以说 HTTPS 一开始总是比普通 HTTP 慢,您无法真正比较它们。所有这些让我觉得...
一个可能的罪魁祸首是提到的OCSP stapling。您的服务器上的 OCSP 装订所做的是您的服务器不时联系您的 CA 以接收签名的 OCSP 响应。在这种情况下,您的 CA 可能是瓶颈。如果它不能按时提供预期的响应,您的连接也会停止,而这恰恰会在您看到它时发生:在 SSL 协商期间。
您可以使用以下命令检查缓存的 OCSP 响应的有效期:
openssl s_client -connect banners.analyticson.com:443 -status -servername banners.analyticson.com
OCSP Response Data:
OCSP Response Status: successful (0x0)
Response Type: Basic OCSP Response
Version: 1 (0x0)
Produced At: Jun 17 21:47:34 2018 GMT
Cert Status: good
This Update: Jun 17 21:47:34 2018 GMT
Next Update: Jun 24 21:47:34 2018 GMT
目前它报告说 OCSP 响应至少在格林威治标准时间 2018 年 6 月 24 日 21:47:34 之前有效,but Apache is configured to expire them quite earlier by default。特别是在 一个 小时之后。您应该尝试将此超时设置为更有意义的值,例如最多一周:
SSLStaplingStandardCacheTimeout 604800
另一个可能的建议是逆向建议:尝试完全禁用 OCSP 装订一段时间。
如果这真的有助于解决问题,那么您应该联系您的 CA 寻求帮助,或者切换到使用已知没有此类问题的其他 CA(想想 Let's Encrypt),或者使用不同的网络服务器可以异步处理 OCSP 装订并将它们缓存更长的时间(想想 nginx)。
进一步的研究表明 Apache 可以work around slow or unreliable OCSP responders,虽然我不确定这些变通办法对你的情况有什么好处。
Modsecurity 可能是一个问题,如果它占用大量 CPU 并与 TLS 竞争(虽然概率不大)。
关键是“每天大约 2 小时,我们在一秒钟内收到 40 个请求,而此时完成请求有时需要大约 20 秒。”该服务器当时(可能)使 CPU 加载(因为建立 HTTPS 连接是 CPU 密集)。因此,请在发生这种情况时检查您的服务器。这将是你的性能瓶颈。
另一点 - 考虑到从 Pingdom 到您的服务器的网络上可能发生了某些事情,因此当问题发生时使用 curl 进行基准测试,如下所示:
x@517713:~$ curl -w "TC:%{time_connect} TST:%{time_starttransfer} TT:%{time_total}\n" https://blog.x.cf -D /dev/null -o /dev/null -s
TC:0.005 TST:0.336 TT:0.377
这些是所有选项:
time_namelookup: %{time_namelookup}\n
time_connect: %{time_connect}\n
time_appconnect: %{time_appconnect}\n
time_pretransfer: %{time_pretransfer}\n
time_redirect: %{time_redirect}\n
time_starttransfer: %{time_starttransfer}\n
----------\n
time_total: %{time_total}\n
有太多可能出错的选项,您应该首先确定问题所在:Pingdom、网络、您的服务器。
一旦完成 - 深入研究。假设是您的服务器出现问题:
- 检查服务器日志——在那段时间他们应该有一些东西;
- 考虑关闭 modsecurity(这非常 CPU 密集);
- 开启服务器缓存;
- 考虑两台服务器之间的负载均衡;
- 也许磁盘很慢 - 检查一下。
P.S。 100% 解决问题的解决方案很难,因为没有提供很多细节。
谢谢大家的回答。
毕竟不是OCSP。证书和一些 Apache 配置碰巧出现了一些问题。我们雇了服务员,他修好了。
因此,如果有人遇到此类问题,应检查服务器配置并寻找优化方法,同时检查证书。这修复了每次响应的等待时间为 3-4 秒。
更大的问题是使用 geoplugin
从 IP 地址检测 Country/City。我不知道 Curl 可以将响应时间减慢到那么低。我当然不是在责怪 geoplugin
。
当我分析我的代码时,它说从开始到结束有 127 毫秒,但事实证明分析器只是跳过了这个 geoplugin 等待时间或 smth。
总之,修改代码、处理证书和服务器配置使其成为现实。
P.S。我不知道如何处理这笔赏金。我不想浪费它,所以我要把它交给回答的人,即使回答没有解决我的问题,问题在赏金到期前一天得到回答,问题已经解决。
我遇到了同样的问题,经过大量挖掘后我发现问题是由我安装了 mod_unique_id 引起的。
进一步检查表明该模块是 mod_security 的要求。一开始我确实删除了 mod_security,但没有做任何更改,只有在删除 mod_unique_id 模块之后,事情才开始正常进行。
希望对您有所帮助。
我在 Hetzner 上有一个 256GB RAM
6 CPUs (12 Threads)
的专用服务器,它位于德国。我有 CENTOS 7.5。 EA4.
我的问题是 SSL。每天大约 2 小时,我们在一秒内有 40 个请求,完成请求大约需要 20 秒.非 SSL 需要 0.5 或更少。 Here 是一个例子。
从 13:00 到 15:30 (UTC+4),SSL 请求花费的时间最多。当您使用 SSL 和不使用 SSL 打开 this link 时,问题很明显。
我有可用的 WHM。我注意到 ModSecurity 并想知道这是否可能是问题所在。我已经应用了提供的大部分设置 here,但是关于 SSL 的设置并不多。
如果证书是所有这一切的原因:
到目前为止我无法重现您的问题。 WebPageTest reports are all good and pretty. 考虑到您启用了 OCSP 装订,SSL 协商在预期的 100-200 毫秒内。否则在 IE 下会花费更长的时间。可以说 HTTPS 一开始总是比普通 HTTP 慢,您无法真正比较它们。所有这些让我觉得...
一个可能的罪魁祸首是提到的OCSP stapling。您的服务器上的 OCSP 装订所做的是您的服务器不时联系您的 CA 以接收签名的 OCSP 响应。在这种情况下,您的 CA 可能是瓶颈。如果它不能按时提供预期的响应,您的连接也会停止,而这恰恰会在您看到它时发生:在 SSL 协商期间。
您可以使用以下命令检查缓存的 OCSP 响应的有效期:
openssl s_client -connect banners.analyticson.com:443 -status -servername banners.analyticson.com
OCSP Response Data:
OCSP Response Status: successful (0x0)
Response Type: Basic OCSP Response
Version: 1 (0x0)
Produced At: Jun 17 21:47:34 2018 GMT
Cert Status: good
This Update: Jun 17 21:47:34 2018 GMT
Next Update: Jun 24 21:47:34 2018 GMT
目前它报告说 OCSP 响应至少在格林威治标准时间 2018 年 6 月 24 日 21:47:34 之前有效,but Apache is configured to expire them quite earlier by default。特别是在 一个 小时之后。您应该尝试将此超时设置为更有意义的值,例如最多一周:
SSLStaplingStandardCacheTimeout 604800
另一个可能的建议是逆向建议:尝试完全禁用 OCSP 装订一段时间。
如果这真的有助于解决问题,那么您应该联系您的 CA 寻求帮助,或者切换到使用已知没有此类问题的其他 CA(想想 Let's Encrypt),或者使用不同的网络服务器可以异步处理 OCSP 装订并将它们缓存更长的时间(想想 nginx)。
进一步的研究表明 Apache 可以work around slow or unreliable OCSP responders,虽然我不确定这些变通办法对你的情况有什么好处。
Modsecurity 可能是一个问题,如果它占用大量 CPU 并与 TLS 竞争(虽然概率不大)。
关键是“每天大约 2 小时,我们在一秒钟内收到 40 个请求,而此时完成请求有时需要大约 20 秒。”该服务器当时(可能)使 CPU 加载(因为建立 HTTPS 连接是 CPU 密集)。因此,请在发生这种情况时检查您的服务器。这将是你的性能瓶颈。
另一点 - 考虑到从 Pingdom 到您的服务器的网络上可能发生了某些事情,因此当问题发生时使用 curl 进行基准测试,如下所示:
x@517713:~$ curl -w "TC:%{time_connect} TST:%{time_starttransfer} TT:%{time_total}\n" https://blog.x.cf -D /dev/null -o /dev/null -s
TC:0.005 TST:0.336 TT:0.377
这些是所有选项:
time_namelookup: %{time_namelookup}\n
time_connect: %{time_connect}\n
time_appconnect: %{time_appconnect}\n
time_pretransfer: %{time_pretransfer}\n
time_redirect: %{time_redirect}\n
time_starttransfer: %{time_starttransfer}\n
----------\n
time_total: %{time_total}\n
有太多可能出错的选项,您应该首先确定问题所在:Pingdom、网络、您的服务器。
一旦完成 - 深入研究。假设是您的服务器出现问题: - 检查服务器日志——在那段时间他们应该有一些东西; - 考虑关闭 modsecurity(这非常 CPU 密集); - 开启服务器缓存; - 考虑两台服务器之间的负载均衡; - 也许磁盘很慢 - 检查一下。
P.S。 100% 解决问题的解决方案很难,因为没有提供很多细节。
谢谢大家的回答。
毕竟不是OCSP。证书和一些 Apache 配置碰巧出现了一些问题。我们雇了服务员,他修好了。
因此,如果有人遇到此类问题,应检查服务器配置并寻找优化方法,同时检查证书。这修复了每次响应的等待时间为 3-4 秒。
更大的问题是使用 geoplugin
从 IP 地址检测 Country/City。我不知道 Curl 可以将响应时间减慢到那么低。我当然不是在责怪 geoplugin
。
当我分析我的代码时,它说从开始到结束有 127 毫秒,但事实证明分析器只是跳过了这个 geoplugin 等待时间或 smth。
总之,修改代码、处理证书和服务器配置使其成为现实。
P.S。我不知道如何处理这笔赏金。我不想浪费它,所以我要把它交给回答的人,即使回答没有解决我的问题,问题在赏金到期前一天得到回答,问题已经解决。
我遇到了同样的问题,经过大量挖掘后我发现问题是由我安装了 mod_unique_id 引起的。
进一步检查表明该模块是 mod_security 的要求。一开始我确实删除了 mod_security,但没有做任何更改,只有在删除 mod_unique_id 模块之后,事情才开始正常进行。
希望对您有所帮助。