Уже ли Discourse поддерживает HTTP/3?
Я понимаю, что это в первую очередь проблема сети, но если я запускаю Discourse, например, на DigitalOcean, то Docker-контейнер, в котором работает Discourse, должен поддерживать HTTP/3.
Уже ли Discourse поддерживает HTTP/3?
Я понимаю, что это в первую очередь проблема сети, но если я запускаю Discourse, например, на DigitalOcean, то Docker-контейнер, в котором работает Discourse, должен поддерживать HTTP/3.
Не знаю, но как HTTP/3 может помочь Discourse?
На данный момент нет
Технически HTTP/3 — это просто ещё одна версия протокола HTTP. Поэтому, если кто-то хочет сегодня предоставить свой экземпляр Discourse через HTTP/3, он может сделать это, установив отдельный обратный HTTP-прокси, поддерживающий HTTP/3, перед вашим экземпляром Discourse. Это возможно без изменения образа Docker Discourse.
Я немного предполагаю, поэтому имейте это в виду, но, похоже, что в образе Docker в качестве обратного прокси для Discourse используется Nginx. Я вижу, что Nginx поддерживает HTTP/3 нативно, но на данный момент считает эту реализацию экспериментальной. Возможно, именно поэтому поддержка HTTP/3 в образе Docker пока не реализована?
Да, это экспериментальная функция, но по результатам тестов на других сайтах видно, что она уже достаточно стабильна для проектов, которые сегодня решают перейти на HTTP/3.
Есть ли среди тех, кто поддерживает Docker-образы для Discourse, тот, кто мог бы добавить поддержку HTTP/3 в качестве опциональной функции для заинтересованных проектов?
Очень интересная статья, которая поможет вам понять преимущества Discourse, находится здесь: What Is HTTP/3 and How Does It Differ from HTTP/2? | Gcore
У меня есть общее представление о HTTP/3, и я знаю, как и почему он полезен для WordPress/LAMP, но не понимаю, почему он должен иметь значение для Discourse.
HTTP3 снижает задержку при установлении соединения между сервером и клиентом до 150 мс. Кроме того, он экономит ресурсы сервера, так как установка HTTP-соединения становится более эффективной.
Таким образом, пользователь получит более качественный опыт взаимодействия с сообществом, а оператор сервера — меньшую нагрузку. Это выгодно всем.
К сожалению, пока нет.
Я поддерживаю ветку нашего контейнера, готовую к HTTP/3, с (проверяю заметки) 2019 года; её можно посмотреть здесь: GitHub - discourse/discourse_docker at http3 · GitHub.
Причина, по которой мы не внедрили это широко, заключается в комплексе проблем в экосистеме в целом:
Разработка Nginx замедлилась до предела, и они больше не успевают за новыми веб-технологиями, такими как HTTP/3 или Early Hints.
Модульная архитектура Nginx позволяла добавить поддержку через модуль, и моя ветка использует модуль Nginx от Cloudflare — quiche. Однако Cloudflare также отказался от Nginx, и этот модуль никогда не считался готовым к промышленному использованию.
Я рассматривал возможность перехода на более современный веб-сервер, например Caddy, но такие изменения крайне сложны, когда вы выпускаете ПО для самостоятельного хостинга, которое пользователи будут настраивать под себя.
Переход на HAProxy был бы проще продать, но мы используем Nginx для раздачи статических файлов, чего HAProxy не умеет делать.
Факт того, что разработчики OpenSSL фактически сорвали разработку QUIC и остановили прогресс всей экосистемы на срок, эквивалентный десятилетию.
Все вышеперечисленное, а также все присущие переходу с TCP на UDP проблемы, которые являются частью этого процесса, означали, что такое изменение было слишком рискованным для нас.
Это очень грустно, учитывая, что за последние 4 года в среднем домохозяйстве большая часть трафика уже использует HTTP/3, поскольку все крупные игроки перешли на него ещё несколько лет назад: YouTube, Amazon, Shopify, Instagram, Twitch.tv и другие. Это ещё больше увеличивает разрыв между крупными технологическими компаниями и небольшими сайтами. Жаль, что нам не удалось стать ранними последователями в этом вопросе, как это было с SPDY, HTTP/2 и Brotli.
Учитывая всё вышесказанное, если вы хотите простое решение «в один клик» для всей этой путаницы, вы можете использовать Cloudflare перед вашим экземпляром Discourse.
Мне жаль это слышать. У меня есть несколько идей для обсуждения. Можем ли мы их обсудить?
Самый чистый способ его реализации, который потенциально может стать чем-то, что мы в конечном итоге выпустим, — это добавление нового шаблона, который будет альтернативой web.ssl.template.yml. Назовём его web.ssl2.template.yml.
В этом шаблоне вместо модификации nginx запускается альтернативный веб-сервер, например Caddy, который обрабатывает весь трафик и проксирует его на nginx. Это позволит проводить множество экспериментов, тестировать различные веб-серверы и потенциально может привести к созданию решения, которое станет стандартным для новых установок.
Звучит отлично. Я бы с радостью принял участие в тестировании. Какие следующие шаги?
Выполняем работу ![]()
Другой подход заключался бы в добавлении в образ Docker выделенного HTTP-реверс-прокси для обработки только трафика HTTP/3. Например, можно внедрить, скажем, Envoy Proxy, который поддерживает входной трафик HTTP/3, и настроить его на прослушивание только порта 443/udp для трафика h3, преобразовывая все входящие запросы h3 в h2 или h1.1 и пересылая их экземпляру Nginx.
Это немного хакерское решение, поэтому я не скажу, что это хорошая идея. ![]()
Как бы вы ни решили поступить, я считаю, что HTTP/3 — это хороший шаг, который поможет всей экосистеме. С нетерпением жду следующих шагов.
[Раскрытие: с января я являюсь менеджером сообщества Фонда OpenSSL].
Как оказалось, OpenSSL 3.5 запланирован к выпуску в апреле с поддержкой QUIC-сервера. Также существует демонстрация HTTP/3-сервера, использующего QUIC-API OpenSSL вместе с nghttp3.
(Поскольку в указанной ссылке поднимался вопрос управления, хочу отметить, что в прошлом году OpenSSL принял новую структуру управления. Я осторожно оптимистичен и считаю, что это наконец помогло вывести QUIC в релиз.)
Похоже, nginx внедрит QUIC-API OpenSSL. Однако пока никаких указаний на сроки нет.