Apache - HTTPS 上有延迟,但 HTTP 上没有延迟

Apache - HTTPS 上有延迟,但 HTTP 上没有延迟

我在 Ubuntu 14.04(几乎是默认设置)虚拟云服务器上遇到了 Apache 2.4.7 的问题。

在中等服务器负载(大约 2/3.0 CPU 使用率和大量可用内存)下,建立 HTTPS 连接的时间会延长至 5-15 秒(有时更长)。以下是 curl 输出示例,请查看时间:

My-MBP:~ me$ curl --trace-time --trace-ascii - https://domain.tld/some.png
20:44:40.952209 == Info:   Trying 111.111.111.111...
20:45:16.046183 == Info: Connected to domain.tld (111.111.111.111) port 443 (#0)
20:45:32.371816 == Info: TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
20:45:32.371919 == Info: Server certificate: www.domain.tld
20:45:32.371946 == Info: Server certificate: GlobalSign Extended Validation CA - SHA256 - G2
20:45:32.372025 == Info: Server certificate: GlobalSign
20:45:32.372069 => Send header, 125 bytes (0x7d)
0000: GET /some.png HTTP/1.1
003c: Host: domain.tld
0055: User-Agent: curl/7.43.0
006e: Accept: */*
007b: 
20:45:32.538703 <= Recv header, 17 bytes (0x11)
0000: HTTP/1.1 200 OK
20:45:32.538747 <= Recv header, 37 bytes (0x25)
0000: Date: Wed, 09 Dec 2015 19:47:34 GMT
20:45:32.538765 <= Recv header, 16 bytes (0x10)
0000: Server: Apache
20:45:32.538778 <= Recv header, 37 bytes (0x25)
0000: X-Powered-By: PHP/5.5.9-1ubuntu4.14
20:45:32.538795 <= Recv header, 23 bytes (0x17)
0000: Cache-Control: public
20:45:32.538810 <= Recv header, 42 bytes (0x2a)
0000: ETag: "1234567890"
20:45:32.538827 <= Recv header, 40 bytes (0x28)
0000: Expires: Wed, 09 Dec 2015 19:57:34 GMT
20:45:32.538844 <= Recv header, 22 bytes (0x16)
0000: Content-Length: 7159
20:45:32.538860 <= Recv header, 25 bytes (0x19)
0000: Content-Type: image/png
20:45:32.538876 <= Recv header, 2 bytes (0x2)
0000: 
20:45:32.539541 <= Recv data, 7159 bytes (0x1bf7)
...

而且文件的传输速率也相当不错,只是建立连接的时间太长了。

但是:通过 HTTP 对同一文件进行的整体请求/响应非常快(<100 毫秒)。在使用量大时(>3.0),HTTP 和 HTTPS 有时也不会出现问题。

有什么建议么?

编辑:

<IfModule mod_ssl.c>
...
  SSLRandomSeed startup builtin
  SSLRandomSeed startup file:/dev/urandom 512
  SSLRandomSeed connect builtin
  SSLRandomSeed connect file:/dev/urandom 512
...
</IfModule>

答案1

这不应该发生在“几乎默认”安装中,因此我建议您就此问题联系您的托管公司,看看他们是否已经知道该问题和/或他们可以修复它。

可能有助于解决问题的其他事项:

  1. 输出openssl speed
  2. 尝试连接到普通的 openssl “服务器” 是否会有相同的连接延迟问题。 您可以通过在不同的控制台上使用以下命令来执行此操作:

对于服务器: openssl s_server -4 -www -accept 444 -cert /etc/ssl/example.com.crt -key /etc/ssl/example.com.key -verify_return_error -debug

对于客户来说: openssl s_client -debug -connect example.com:444

您可以尝试连接到https://example.com:444使用您的浏览器也可以。

  1. 检查您是否提供了中间链以及证书本身。
  2. 尝试在 mod_ssl.conf 中使用类似下面的内容来更改 apache 使用的密码套件:

SSLHonorCipherOrder On

SSLCipherSuite ALL:!ADH:!EXP:!LOW:!RC2:!3DES:!SEED:!RC4:+HIGH:+MEDIUM

  1. 检查你的托管公司的其他客户是否有同样的问题(尝试通过你周围的 IP 连接到 https)

  2. 检查使用 nginx 前端提供 https 服务是否可以解决问题

相关内容