Назад | Перейти на главную страницу

Apache - задержка по HTTPS, но не по HTTP

У меня проблема с Apache 2.4.7 на Ubuntu 14.04 (настройки почти по умолчанию), виртуальный облачный сервер.

При средней загрузке сервера (около 2 / 3,0 процессора и тонны свободной памяти) время установления 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. Выход 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. Попытка изменить набор шифров, используемый apache, примерно так в mod_ssl.conf:

SSLHonorCipherOrder On

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

  1. Проверка, есть ли у других клиентов вашей хостинговой компании такая же проблема (попробуйте подключиться к https на IP-адресах вокруг вашего)

  2. Проверка того, что использование интерфейса nginx для обслуживания https решит проблему