Re: Низкая скорость передачи данных при использовании https
Maxim Dounin
mdounin на mdounin.ru
Чт Апр 8 14:48:38 UTC 2021
Hello!
On Thu, Apr 08, 2021 at 05:28:16PM +0600, raven_kg at megaline.kg wrote:
> Замечено, что по https отдача первого байта происходит на 200мс дольше.
>
>
> # curl -s -o /dev/null -w "Connect: %{time_connect} TTFB:
> %{time_starttransfer} Total time: %{time_total} \n"
> https://<domain>/robots.txt
> Connect: 0,101801 TTFB: 0,424129 Total time: 0,424269
> # curl -s -o /dev/null -w "Connect: %{time_connect} TTFB:
> %{time_starttransfer} Total time: %{time_total} \n"
> http://<domain>/robots.txt
> Connect: 0,099435 TTFB: 0,196609 Total time: 0,196732
>
>
> Для меня не новость, что SSL требует время для шифрования, но не
> слишком-ли много? Ниже выдержки из конфига со всем, что касается SSL:
SSL - это не только затраты процессора на шифрование, но ещё и
пара дополнительных round trip'ов на собственно SSL handshake. С
учётом того, что просто коннект у вас занимает 100ms -
дополнительные 200ms на SSL handshake без кэширования сессий
выглядят логично.
В случае TLSv1.3 в теории должно добавляться 1 RTT на handshake в
типичном случае, но тут уже могут быть нюансы. Во-первых, важна
поддержка TLSv1.3 всеми сторонами, а во-вторых, важны настройки:
можно свалиться в запрос HelloRetryRequest и соответственно 2 RTT.
Вот это вот у вас в конфиге:
> ssl_ecdh_curve secp384r1;
в случае curl'а гарантировано приведёт к HelloRetryRequest и двум
RTT, то есть к 200 миллисекундам задержки в вашем случае.
Уберите это из конфига, и проверьте с "curl --tlsv1.3" - и 200
миллисекунд должны подужаться до где-то 100.
Не надо менять ssl_ecdh_curve с auto на что либо другое без веских
причин. Остальные параметры SSL, впрочем, тоже не стоит крутить
без нужды и понимания того, к чему это ведёт - даже если где-то в
интернете рекомендуют.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru