Как установить и настроить HTTP/3 и QUIC на VPS
HTTP/3 ускоряет загрузку сайта там, где старый HTTP/2 буксует: на мобильном интернете, при потерях пакетов и на нестабильном канале. Работает он поверх нового транспорта QUIC на UDP, а не TCP, и потому требует отдельной настройки. Разберём, как включить HTTP/3 и QUIC на VPS в Nginx: что собрать, что прописать в конфиге и какой порт открыть.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое HTTP/3 и QUIC и зачем они нужны
HTTP/3 — третья версия протокола, которая отказалась от TCP в пользу QUIC, транспортного протокола поверх UDP. Причина смены фундамента — врождённая проблема HTTP/2, известная как head-of-line blocking: при потере одного пакета TCP тормозит все потоки в соединении, ожидая его повтора. QUIC мультиплексирует потоки независимо, поэтому потеря пакета в одном из них не задерживает остальные.
На практике выигрыш заметнее всего на плохих каналах. На стабильном проводном соединении разница между HTTP/2 и HTTP/3 невелика, но на мобильной сети с потерями, при переключении между Wi-Fi и сотовой связью, при высоком пинге QUIC ощутимо быстрее устанавливает соединение и восстанавливается после сбоев. Ещё один плюс — рукопожатие TLS встроено в установку QUIC-соединения, что экономит один полный round-trip при первом подключении.
Стоит быть честным: HTTP/3 — не волшебная кнопка ускорения. Для сайта с быстрым бэкендом и хорошей аудиторией прирост будет скромным. Но для проектов с мобильными пользователями, международной аудиторией и высокими задержками включить его определённо стоит, тем более что современные браузеры давно его поддерживают.
Есть и приятный побочный эффект — миграция соединений. QUIC привязывает сессию не к паре IP-адресов, как TCP, а к идентификатору соединения. Благодаря этому при смене сети — например, когда телефон уходит с Wi-Fi в сотовую связь — соединение не рвётся и не устанавливается заново, а продолжается с того же места. Для мобильного пользователя это означает, что видео не подвисает, а загрузка не начинается с нуля при выходе из дома. TCP так не умеет в принципе: смена адреса для него означает новое соединение со всеми задержками рукопожатия.
Что нужно для поддержки HTTP/3 в Nginx
Ключевой момент: не любой Nginx умеет HTTP/3. Поддержка QUIC появилась в основной ветке начиная с версии 1.25, но обычные пакеты из репозитория дистрибутива часто собраны без неё. Поэтому первый шаг — проверить, что у вас за сборка:
nginx -V 2>&1 | tr ' ' '\n' | grep -i http_v3
Если в выводе есть модуль http_v3, вам повезло и всё готово. Если нет, придётся либо взять свежий пакет из официального репозитория Nginx с поддержкой QUIC, либо собрать Nginx из исходников с нужной библиотекой TLS. Дело в том, что QUIC требует библиотеки, умеющей TLS 1.3 поверх QUIC, — обычный системный OpenSSL старых версий этого не даёт.
Для роли веб-сервера с HTTP/3 хватает скромного VPS: 1–2 ядра и 2 ГБ RAM. QUIC чуть больше нагружает процессор, чем TCP, из-за шифрования в пространстве пользователя, но на типовом трафике разница некритична. Локацию выбирайте по аудитории: выигрыш QUIC особенно виден при большом пинге, поэтому сервер ближе к пользователям усиливает эффект. У MAATRIX доступны площадки RU, US и UK с оплатой из России картой или криптой — можно взять локацию под своих посетителей.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPSУстановка Nginx с поддержкой QUIC
Проще всего подключить официальный репозиторий Nginx, где собраны пакеты с QUIC. Добавьте его и поставьте свежую версию:
curl -o /usr/share/keyrings/nginx-archive-keyring.gpg https://nginx.org/keys/nginx.gpg
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/ubuntu $(lsb_release -cs) nginx" > /etc/apt/sources.list.d/nginx.list
apt update && apt install nginx -y
После установки снова проверьте наличие модуля HTTP/3:
nginx -V 2>&1 | grep -o with-http_v3_module
Строка with-http_v3_module в выводе подтверждает, что сборка умеет QUIC. Если её нет даже в mainline-пакете, остаётся ручная сборка — это дольше, но даёт полный контроль над версией TLS-библиотеки. Для большинства случаев официальный mainline-пакет закрывает вопрос.
Настройка конфига: listen quic и Alt-Svc
HTTP/3 работает только поверх HTTPS, поэтому у вас уже должен быть настроен рабочий сайт с сертификатом. К существующему серверному блоку добавляются директивы для QUIC. Отредактируйте конфиг:
server {
listen 443 ssl;
listen 443 quic reuseport;
http2 on;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
add_header Alt-Svc 'h3=":443"; ma=86400';
location / {
proxy_pass http://127.0.0.1:3000;
}
}
Ключевых элементов здесь два. Директива listen 443 quic reuseport включает приём QUIC на UDP-порту 443 (параметр reuseport нужен для эффективного распределения соединений между воркерами и указывается только в одном серверном блоке). А заголовок Alt-Svc — это то, как браузер узнаёт про HTTP/3: первое соединение всегда идёт по TCP, сервер сообщает «я умею h3 на 443», и следующие запросы браузер уже пробует по QUIC. Без Alt-Svc клиент просто не узнает, что HTTP/3 доступен.
Проверьте конфиг и перезагрузите Nginx:
nginx -t && systemctl reload nginx
Открытие UDP-порта в фаерволе
Самая частая причина, по которой «HTTP/3 настроен, но не работает», — закрытый UDP-порт. QUIC ходит по UDP 443, а не по TCP, и стандартное правило для TCP его не пропускает. Нужно открыть именно UDP:
ufw allow 443/udp
ufw reload
Не забудьте, что порт нужно открыть и в облачном фаерволе провайдера, если он есть поверх системного. Это отдельная от ufw сущность, и правило для TCP 443 там точно так же не покрывает UDP. Проверьте, что Nginx действительно слушает UDP-порт:
ss -ulnp | grep :443
Если в выводе виден процесс Nginx на UDP 443 — транспорт поднят. Отсутствие строки означает, что либо сборка без QUIC, либо директива listen ... quic не применилась.
Проверка, что HTTP/3 реально работает
Настроить мало — нужно убедиться, что соединение действительно идёт по HTTP/3. Самый надёжный способ — свежий curl с поддержкой HTTP/3, который явно покажет версию протокола:
curl -I --http3 https://example.com
В ответе должна быть строка HTTP/3 200. Если curl без поддержки h3, проверить можно через браузер: в панели разработчика на вкладке сети в колонке протокола у запросов появится h3. Учтите нюанс — первый запрос почти всегда идёт по HTTP/2, и только после получения Alt-Svc браузер переключается на HTTP/3 для последующих. Поэтому смотрите на повторную загрузку страницы, а не на самую первую.
Отдельно стоит проверить онлайн-сервисами проверки HTTP/3, которые обращаются к вашему домену снаружи и подтверждают доступность QUIC из интернета, а не только с локальной машины. Если локально всё работает, а внешняя проверка не видит h3 — почти наверняка дело в закрытом UDP-порту на стороне провайдера. Когда всё сошлось, HTTP/3 дальше работает прозрачно: TCP-версия остаётся запасным путём для старых клиентов, а современные браузеры автоматически используют более быстрый QUIC.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPSОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Любой ли Nginx поддерживает HTTP/3 и QUIC на VPS?
Нет, нужна сборка версии 1.25 и новее с модулем http_v3; проверьте вывод nginx -V, при отсутствии ставьте mainline-пакет из репозитория Nginx.
Почему HTTP/3 настроен, но браузер идёт по HTTP/2?
Первое соединение всегда по TCP, переключение происходит после заголовка Alt-Svc; смотрите повторную загрузку и убедитесь, что заголовок отдаётся.
Какой порт открывать для QUIC?
UDP 443 — именно UDP, а не TCP, и не забудьте про облачный фаервол провайдера поверх системного ufw.
Стоит ли включать HTTP/3 всем?
Наибольший выигрыш получают проекты с мобильной и международной аудиторией при высоком пинге и потерях; на стабильном проводном канале разница невелика.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.