nginx: HTTP/2 и kTLS

izorkin на gmail.com izorkin на gmail.com
Вс Янв 7 07:39:00 UTC 2024


Доброе утро.

При использовании 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.


-- 
С уважением,
 Izorkin                          mailto:izorkin на gmail.com


Подробная информация о списке рассылки nginx-ru