对于 Apache 来说 https 和 http 的性能影响有多大?

对于 Apache 来说 https 和 http 的性能影响有多大?

对于同一个页面,https 相比 http 大概会造成多大的性能损失?假设我可以处理 abc.php 的每秒 1000 个请求,那么通过 https 访问时会降低多少性能?我知道这可能取决于硬件、配置、操作系统等,但我只是在寻找一般的经验法则/估计值。

答案1

为了进行快速而粗略的测试(即不进行任何优化!),我在本地 Ubuntu 9.04 VM 上启用了简单的 Ubuntu apache2 默认网站(只显示“它有效!”),同时使用 http 和 https(自签名证书),并运行 apache 基准测试“ ab”,请求数为 10,000(无并发)。客户端和服务器位于同一台机器/VM 上:

结果http(“ ab -n 10000 http://ubuntu904/index.html”)

  • 测试所需时间:2.664
  • 每秒请求数:3753.69(#/秒)
  • 每个请求的时间:0.266 毫秒

结果https(“ ab -n 10000 https://ubuntu904/index.html”):

  • 测试所需时间:107.673
  • 每秒请求数:92.87(#/秒)
  • 每个请求的时间:10.767 毫秒

如果你仔细观察(例如使用 tcpdump 或 wireshark)某个网络的 tcp/ip 通信,单一请求你会发现,http 的情况要求客户端和服务器之间有 10 个数据包,而 https 则需要 16 个:https 的延迟要高得多。(有关延迟重要性的更多信息这里

在测试中添加 keep-alive (ab选项-k)可以改善这种情况,因为现在所有请求都共享相同的连接,即 SSL 开销较低 - 但 https 仍然可以测量出较慢的速度:

结果http保持活动状态(“ ab -k -n 10000 http://ubuntu904/index.html”)

  • 测试所需时间:1.200
  • 每秒请求数:8334.86(#/秒)
  • 每个请求的时间:0.120ms

结果https使用保持活动(“ ab -k -n 10000 https://ubuntu904/index.html”):

  • 测试所需时间:2.711
  • 每秒请求数:3688.12(#/秒)
  • 每个请求的时间:0.271 毫秒

结论

  • 在这个简单的测试用例中 https 比 http 慢得多。
  • 启用 https 支持和基准测试是个好主意你的网页看看您是否愿意支付 https 开销。
  • 使用 wireshark 来了解 SSL 开销。

答案2

在现代服务器上,我认为瓶颈在于网络和应用程序,而不是加密。Apache 中的 TLS/SSL 将使用经过优化的 C 语言编写,因此与 PHP 代码相比会显得微不足道,特别是如果您要执行数据库访问之类的操作。提供静态文件可能会产生更大的影响,因为加密将成为整个过程的重要组成部分。我无法给您任何具体的数字,但如果它超过 5%,甚至接近百分之几,我会感到惊讶。

答案3

不要假设任何事情,自己测试一下!当然是在您的特定网络应用程序上。

答案4

我赞同对 nginx 的推荐。在我自己的测试中,它作为专用 SSL 卸载程序表现良好。

相关内容