Я хотел использовать HTTP2 с Apache 2.4.16 (возможно, нужно обновить до 2.4.17) и наткнулся на этот комментарий на официальной странице Apache.
Предупреждение
Этот модуль экспериментальный. Его поведение, директивы и значения по умолчанию могут больше изменяться от выпуска к выпуску по сравнению с другими стандартными модулями. Пользователям рекомендуется обращаться к файлу «ИЗМЕНЕНИЯ» на предмет возможных обновлений.
С другой стороны, многие другие делают уроки о том, как его включить. Так безопасно ли его использовать или нам нужно подождать?
Кроме того, можем ли мы использовать HTTP2 в сочетании с обратным прокси?
Обновление: Начиная с Apache 2.4.26, mod_http2 больше не считается экспериментальным. Ответ ниже был обновлен, чтобы отразить это.
Также обратите внимание, что mod_http2_proxy по-прежнему считается экспериментальным.
Экспериментальный тег добавляется при первом добавлении функциональности и, как поясняется в тексте, предупреждает, что реализация, параметры и API могут быть изменены. Поэтому, если вы используете экспериментальную функцию, вам следует внимательно прочитать Файл изменений при установке любых последующих обновлений, чтобы быть в курсе любых изменений, которые необходимо внести.
Тег Experimental делает не означают, что реализация нестабильна. Нестабильные параметры обычно не добавляются непосредственно в главное дерево исходных кодов Apache, а вместо этого обрабатываются как отдельные устанавливаемые модули.
Сказав это, чтобы использовать HTTP / 2, вам нужно будет обновить по крайней мере до 2.4.17, но на самом деле следует обновить до последней версии (2.4.26 на момент написания), так как этот модуль немного меняется, имеет ряд ошибок и улучшения производительности с момента запуска, и даже был устранен ряд CVE (в том числе: 2016-1546, 2016-8740 и 2017-7659). Это не значит, что это особо ошибочно или опасно, и в Apache (и почти во всем остальном программном обеспечении) есть множество других CVE, но это означает, что вам действительно следует запустить последнюю версию.
Вам также необходимо будет скомпилировать OpenSSL 1.0.2 для работы с Chrome и Firefox (поскольку они позволяют согласовывать соединение HTTP / 2 только более новому протоколу ALPN, а не старому протоколу NPN), что может быть дополнительной проблемой, поскольку большинство пакетов менеджеры еще не включают это. Начиная с версии 2.4.26 Apache также поддерживает OpenSSL 1.1.
Запуск более новых версий и компиляция из исходного кода, а не из менеджеров пакетов (например, yum или APT) требует дополнительных усилий и дисциплины (поскольку они не будут так легко установлены или исправлены), что выходит за рамки вашего вопроса, но не что-то, во что можно легко войти. Все это при условии, что вы работаете в Linux. Если вы используете Windows, вы, вероятно, уже загружаете и устанавливаете отдельно.
Наконец, к сути вашего вопроса. В выпуске Apache 2.4.26 экспериментальное предупреждение было удалено для основного mod_http2
модуль, хотя он все еще на месте для более новых mod_proxy_http2
модуль. Я лично использую HTTP / 2 на своем личном блоге с 2.4.17, и у меня никогда не было серьезных проблем с ним. Мне он кажется достаточно стабильным. С другой стороны, я не получаю больших объемов трафика, и для меня не проблема, если он упадет. Мог бы я запустить его на реальном производственном сайте? Вероятно, пока это экспериментальное предупреждение не было удалено (2.4.26). Опять же, единственный способ это сделать - это попробовать. HTTP / 2 также достаточно легко отключить, если он действительно вызывает проблемы. В основном это полностью зависит от вашего аппетита к риску. Вы можете прочитать (и подписаться) на список известных проблем на GitHub (https://github.com/icing/mod_h2/issues), а автор модуля очень отзывчив и полезен.
Не уверен, что вы спрашиваете о функциях обратного прокси. Начиная с 2.4.21 представлен Apache mod_proxy_http2
который обрабатывает серверные части HTTP / 2, но я бы сказал, что он еще реже используется и тестируется (все еще отмечен как экспериментальный). Это также не так полезно: основные преимущества HTTP / 2 заключаются в сетях с высокой задержкой (т. Е. Между клиентскими интерфейсами), а не в подключениях между интерфейсами и серверными модулями с низкой задержкой. Так что на данный момент у меня будет HTTP / 2 на Apache, но я сохраню соединение обратного прокси с любой внутренней инфраструктурой на HTTP / 1. И да, это работает абсолютно нормально, если это то, о чем вы спрашивали, хотя ответы на в этом вопросе утверждается, что использование HTTP / 2 на всем протяжении.