HTTP 2 не работает в Ubuntu 16.04 с Apache2: как я могу это отладить?
Системная информация:
Ubuntu 16.04
Apache 2.4.29
PHP 7.0.22 (CLI)
Чтобы включить Apache 2, я выполнил следующие шаги в этом руководстве: https://http2.pro/doc/Apache.
В том числе:
добавленной Protocols h2 h2c http/1.1
к apache2.conf, а также к Virtual Hosts configuration
,
Успешно сделал:
a2enmod mpm_event
a2enmod http2
Restarted:
service apache2 restart
sudo service php7.0-fpm reload
Тем не менее сервер отказывается говорить HTTP 2. Пробовал различные уроки.
Я довольно новичок в Ubuntu: что мне может не хватать и какие шаги я могу предпринять для устранения этой проблемы?
1 ответ
проблема
Сидя в /var/log/apache2/error.log
архив, содержит что-то вроде этого:
[http2: warn] [pid 3220] AH10034: модуль modm mpm (prefork.c) не поддерживается mod_http2. MPM определяет, как все обрабатывается на вашем сервере. HTTP/2 предъявляет к этому больше требований, и текущий выбранный mpm просто не подходит. Это консультативное предупреждение. Ваш сервер продолжит работать, но протокол HTTP / 2 будет неактивным.
Prerequisits
Запустите команду терминала для получения собственных переменных:
- Версия Ubuntu:
lsb_release -a
- Версия Apache:
apache2 -v
- Версия PHP:
php -v
Этот вопрос для:
Ubuntu 16.04
Apache 2.4.29
PHP 7.0.22 (CLI)
Этот ответ как раз для:
Ubuntu 16.04.3 LTS
Apache/2.4.29 (Ubuntu)
PHP 7.1.12-3+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Dec 14 2017 15:37:13)
PHP 7.1.12 был собран, следуя инструкциям (см. Вопрос): Как включить поддержку HTTP / 2 в Apache, последнее обновление 5 ноября 2017.
отказ
Делайте это на свой страх и риск; не используйте этот ответ на любом производственном сервере. Добро пожаловать;-) .
Ответ
Процитируйте тот же учебник, названный ранее:
Apache 2.4.27, HTTP / 2 не поддерживается в prefork
Мы должны изменить режим prefork на режим события или рабочий, но ВНИМАНИЕ вам нужно будет использовать PHP в качестве FastCGI.
Шаг за шагом
Первый шаг
Сначала добавьте репозиторий Ondřej Surý (обратите внимание на символы UTF8) в вашу Ubuntu, эти инструкции взяты из этого руководства DigitalOcean. Вам потребуются права root, здесь мы будем использовать команду sudo:
sudo add-apt-repository ppa:ondrej/php
sudo apt-get install -y language-pack-en-base
sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
sudo apt-get update
Шаг второй
sudo apt-get install php7.1
Да, верно, не шучу. После этого следующий шаг.
Шаг третий
sudo apachectl stop
sudo apt-get install php7.1-fpm
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.1-fpm
sudo a2dismod php7.1
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo apachectl start
Troubleshotting
Если у вас есть проблемы с
sudo a2dismod php7.1
просто попробуйте это:
sudo a2dismod php7.0
(у нас тоже была эта проблема: sudo a2dismod php7.1)
Возможное улучшение
Если вы хотите использовать последнюю версию пакета:
sudo apt-get install php7.2-fpm
( Мы его установили, смотрите картинку)
Проверка хорошо выполненной работы
Смотрите следующий рисунок для нашего результата и посетите https://http2.pro/ для собственного теста (сначала установите ufw!)
Заключение
Скоро появится новая технология! Смотрите другие будущие протоколы здесь!
Спасибо за посещение AskUbuntu!