nginxQuic: скорость загрузки при активации kTLS
Maxim Dounin
mdounin на mdounin.ru
Сб Янв 6 18:27:52 UTC 2024
Hello!
On Sat, Jan 06, 2024 at 08:20:59PM +0300, izorkin на gmail.com wrote:
> Добрый вечер, Илья.
>
> Да, он влияет как и на HTTP/1.1 и на HTTP/2 протоколы. Ещё бы добавить опцию, например, disable_ktls_for_protocol.
> В итоге получится примерно такой вариант:
> server {
> listen 0.0.0.0:443 quic reuseport ;
> listen 0.0.0.0:443 ssl reuseport ;
> http2 on;
> http3 on;
> ssl_conf_command Options KTLS;
> disable_ktls_for_protocol http2;
>
> По итогу при активации kTLS не будет просадки в производительности для HTTP/2 протокола, т.к. обработкой
> шифрованием будет заниматься сам процесс nginx :)
Просадка производительности, которую вы наблюдаете для HTTP/2 при
включённом kTLS - не собственно из-за kTLS, а из-за того, что у
вас включён sendfile, и при включённом kTLS становится возможным
его использование. А в случае HTTP/2 это выливается в большое
количество syscall'ов из-за HTTP/2-фрейминга.
Если очень хочется получить включённый sendfile и kTLS в случае
HTTP/1.x, и выключенный в случае HTTP/2, то можно сделать как-то
так (слегка адаптировано из
https://mailman.nginx.org/pipermail/nginx-devel/2022-September/NSHDCLL2TY3Q536CO5MAKXSC3HCIMUNF.html):
server {
listen 443 ssl;
http2 on;
location / {
if ($server_protocol != 'HTTP/2.0') {
rewrite ^(.*) /sendfile$1 last;
}
sendfile off;
}
location /sendfile/ {
alias html/;
sendfile on;
}
}
Но смысла в этом не очень много, так как при включённом HTTP/2
рассчитывать на клиентов, которые придут по HTTP/1.x, не имеет
особого смысла, таких клиентов будет исчезающе мало. Если хочется
получить высокую производительность при скачивании больших файлов,
и при этом использовать HTTP/2 (и/или HTTP/3), то имеет смысл
заводить отдельный виртуальный сервер, в котором разрешать только
HTTP/1.x (а также sendfile и kTLS), и раздавать файлы с него.
Для HTTP/3 не работают ни kTLS, ни sendfile, соответственно
влияния на производительность HTTP/3 от включения kTLS не будет.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru