Maxim Dounin
January 08, 2024 04:06PM
Hello!

On Sun, Jan 07, 2024 at 10:39:00AM +0300, izorkin@gmail.com wrote:

> Доброе утро.
>
> При использовании kTLS и sendfile наблюдается просадка производительности
> при отдаче статических файлов, например при видео-стриминге. Одним из
> вариантов решения является перенести статический файлы на другой хост и
> использовать там только протоколы HTTP/1.1 и/или HTTP/3. Либо усложнять
> логику работы в блоке location.
>
> Не все сервисы позволяют выводить статику на отдельный хост, либо могут
> иметь сложную конфигурацию nginx. Например web-сервис Peertube имеет
> множество блоков location и использует различные условия if:
> https://github.com/Chocobozzz/PeerTube/blob/develop/support/nginx/peertube
>
> Обычному пользователю будет сложнее с этим разобраться и добавить
> дополнительные блоки для исключения работы протокола HTTP/2 через kTLS.
> Вполне легко можно запутаться и нарушить логику работы сайта.
>
> Хотелось бы иметь более простой и универсальный способ отключения
> обработки протокола HTTP/2 через kTLS.
>
> Предполагаю, что перед передачей шифрования ядру системы сейчас nginx
> проверяет наличие ssl и параметра sendfile. Можно ли добавить дополнительное
> условие, которое проверяет дополнительный параметр, который указывает
> какой протокол исключить из обработки шифрования ядром?
>
> По итогу получится примерно такой вариант конфигурации:
> 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;
> ...
>
> Мне кажется, что такой вариант эффективнее, чем добавлять условие if с
> rewrite и дополнительный блок location.

Как я уже писал ранее,

1. Дело не в kTLS, kTLS работает для HTTP/2 точно так же, как и
для HTTP/1.x. Просто в отсутствии акселераторов - kTLS сам по
себе не даёт примерно ничего. Дело в sendfile(), который при
включённом kTLS начинает работать в том числе для HTTP/2, но для
HTTP/2 он работает плохо из-за фрейминга.

2. Смысла в таком решении примерно ноль, потому что типичный
браузер всё равно соединится по HTTP/2 (или по HTTP/3). То есть с
тем же успехом можно просто выключить sendfile (и/или kTLS),
результат не будет отличаться.

Если хочется, чтобы было быстро - надо выносить (большую) статику в
отдельный домен, где разрешать только HTTP/1.x, и соответственно
включать sendfile и kTLS.

Впрочем, насколько быстро - это отдельный вопрос. Скорее всего на
линуксе примерно те же результаты можно получить, просто подняв
размер output_buffers (http://nginx.org/r/output_buffers).

--
Maxim Dounin
http://mdounin.ru/
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

nginx: HTTP/2 и kTLS

Anonymous User January 07, 2024 02:40AM

Re: nginx: HTTP/2 и kTLS

Maxim Dounin January 08, 2024 04:06PM

Re: nginx: HTTP/2 и kTLS

Anonymous User January 09, 2024 01:50PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 302
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready