Nginx 4341 ~ 2 мин.

Как включить HTTP/3 в Nginx

Как включить HTTP/3 в Nginx

Ровно пару лет назад я писал про разработку новой версии протокола HTTP - HTTP/3. До недавнего времени это было тестовые ветки разработки, но в настоящее время вы можете уже начать использовать HTTP/3 на своих проектах.

Немного вводной информации о HTTP/3

Конечно же, важным отличием HTTP/3 является то, что он работает на новом транспортном протоколе QUIC. QUIC предназначен для интенсивного использования мобильных устройств в Интернете, когда люди носят с собой смартфоны, которые постоянно переключаются из одной сети в другую в течение дня. Когда были разработаны первые интернет-протоколы, этого еще не было: устройства были менее портативными и нечасто переключались между сетями.

Т.е. QUIC поможет исправить некоторые из самых больших недостатков HTTP/2:

  • Разработка решения проблемы низкой производительности при переключении смартфона с Wi-Fi на сотовые данные (например, при выходе из дома или офиса)

  • Уменьшение последствий потери пакетов - когда один пакет информации не доходит до места назначения, он больше не блокирует все потоки информации (проблема, известная как «блокировка начала строки»).

Кстати, протокол QUIC был разработан Google еще в 2012 году и принят Инженерной группой Интернета (IETF) — независимой от поставщиков организацией по стандартизации — когда они начали создавать новый стандарт HTTP/3. Посоветовавшись с экспертами со всего мира, IETF внесла множество изменений для разработки собственной версии QUIC.

Включить поддержку HTTP/3 в Nginx

Поддержка протоколов QUIC и HTTP/3 доступна начиная с версии 1.25.0. Также, начиная с 1.25.0, поддержка доступна в готовых пакетах для Linux.

Поддержка QUIC и HTTP/3 экспериментальная, поэтому возможно всё.

Проверяем версию nginx:

nginx -v

Убеждаемся в правильной версии:

$ nginx version: nginx/1.25.3

Для сборки nginx рекомендуется библиотека SSL с поддержкой QUIC, например BoringSSL, LibreSSL или QuicTLS. Иначе, при использовании библиотеки OpenSSL, будет использоваться OpenSSL compatibility layer, в котором не поддерживается early data.

Итак имеем стандартный виртуальный хост nginx с HTTP/2:

server
{
    listen 443 ssl;
    # включаем поддержку http2
    http2 on;  
 
    ssl_protocols TLSv1.2;

    ssl_certificate /path_certs/fullchain.pem;
    ssl_certificate_key path_certs/privkey.pem;
    ...
}

Теперь дополним его директивами для включения HTTP/3:

server
{
    # для лучшей совместимости рекомендуется использовать один порт для quic и https
    # указываем протокол quic и параметр reuseport для правильной работы с несколькими рабочими процессами
    listen 443 quic reuseport;    
    listen 443 ssl;

    # включаем поддержку http2
    http2 on;    
    # включаем поддержку http3
    http3 on;
    # разрешаем GSO
    quic_gso on;
    # разрешаем проверку адреса
    quic_retry on;

    # Для работы QUIC требуется версия протокола TLSv1.3.
    ssl_protocols TLSv1.2 TLSv1.3;

    ssl_certificate /path_certs/fullchain.pem;
    ssl_certificate_key path_certs/privkey.pem;

    # для перенаправления браузеров в quic-порт
    add_header Alt-Svc 'h3=":443";max=86400';

    ...

}

В принципе все, если возникнуть проблемы с подключением, убедитесь:

  • что nginx собран с правильной SSL-библиотекой и версией

  • что клиент действительно поддерживает работу с QUIC

После внесения правок и перезагрузки веб-сервера, можете проверить через сервис поддержку HTTP/3, либо сейчас сразу можете проверить сайт ниже в поле.

Что думаешь?

Категории
  • PHP 67
  • Заметки 17
  • Безопасность 3
  • Флуд 2
  • Nginx 2
  • ИТ новости 2
  • Видео 1
  • Docker 1
  • Roadmap 1
  • Архитектура 0

Хочешь поддержать сайт?

Делаем из мухи слона

sergeymukhin.com

персональный блог о веб-разработке от Сергея Мухина. Блог был основан в 2018 году, и собирался уделять основное внимание последним тенденциям, учебным пособиям, а также советам и рекомендациям, позволяющим начинающим девелоперам встать быстрее на правильную дорогу веб разработки, но что-то пошло не так 😃

Релизы PHP 8.4

Дата Релиз
8 Июня 2024 Альфа 1
20 Июня 2024 Альфа 2
04 Июля 2024 Альфа 3
16 Июля 2024 Feature freeze
18 Июля 2024 Бета 1
01 Августа 2024 Бета 2
15 Августа 2024 Бета 3
29 Августа 2024 RC 1
12 Сентября 2024 RC 2
26 Сентября 2024 RC 3
10 Октября 2024 RC 4
24 Октября 2024 RC 5
07 Ноября 2024 RC 6
21 Ноября 2024 GA

Что нового?