对于同一个页面,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 卸载程序表现良好。