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