Рейтинг:0

Включена поддержка HTTP/2 в apache2 v2.4.25 в Debian 9.13, но тесты не показывают поддержки HTTP/2

флаг ve

Я пытаюсь настроить поддержку HTTP/2, но что-то идет не так

Мой сервер представляет собой вычислительный движок Google, на котором работает версия сервера Debian 9.13 (stretch) Apache/2.4.25 с сертификатами SSL, настроенными с использованием OpenSSL. Когда я бегу версия openssl он сообщает о версии 1.1.1g. При работе phpinfo(); он сообщает OpenSSL/1.0.2u. PHP версии 7.4.11 и phpinfo(); также сообщает...

SSL_VERSION_INTERFACE -> mod_ssl/2.4.25
SSL_VERSION_LIBRARY -> OpenSSL/1.0.2u
SSL_ПРОТОКОЛ -> TLSv1.2

Я следовал инструкциям здесь на «Включить модуль HTTP/2 в Apache» и «Включить HTTP/2 на вашем виртуальном хосте Apache», а также здесь. После этого, когда я запускаю команду apache2ctl-M | грэп http2 он возвращается http2_module (общий) который сигнализирует о том, что поддержка HTTP/2 включена. Но его нет в производстве.

Вот строка, используемая в моем файле конфигурации виртуальных хостов apache2. /etc/apache2/сайты-доступны/по умолчанию-ssl.conf

<Виртуальный хост _default_:443>
    Протоколы h2 h2c http/1.1
    ...

Вот подробная информация о подключении при использовании curl -vso http2_debug.log --http2 https://pharealty.com/ команда, которая успешно загружает страницу.

* Попытка 35.236.101.224...
* Установлен TCP_NODELAY
* Подключено к pharealty.com (35.236.101.224) порт 443 (#0)
* ALPN, предлагая h2
* ALPN, предлагающий http/1.1
* Выбор шифра: ВСЕ:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* успешно установить места проверки сертификата:
* CA-файл: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.2 (OUT), заголовок TLS, статус сертификата (22):
} [5 байт данных]
* TLSv1.2 (OUT), рукопожатие TLS, приветствие клиента (1):
} [512 байт данных]
* TLSv1.2 (IN), рукопожатие TLS, приветствие сервера (2):
{ [109 байт данных]
* TLSv1.2 (IN), рукопожатие TLS, сертификат (11):
{ [данные 4036 байт]
* TLSv1.2 (IN), рукопожатие TLS, обмен ключами сервера (12):
{ [333 байта данных]
* TLSv1.2 (IN), рукопожатие TLS, сервер готов (14):
{ [4 байта данных]
* TLSv1.2 (OUT), рукопожатие TLS, обмен ключами клиента (16):
} [70 байт данных]
* TLSv1.2 (OUT), изменение шифра TLS, приветствие клиента (1):
} [1 байт данных]
* TLSv1.2 (OUT), рукопожатие TLS, Готово (20):
} [16 байт данных]
* TLSv1.2 (IN), изменение шифра TLS, приветствие клиента (1):
{ [1 байт данных]
* TLSv1.2 (IN), рукопожатие TLS, Готово (20):
{ [16 байт данных]
* SSL-соединение с использованием TLSv1.2/ECDHE-RSA-AES256-GCM-SHA384
* ALPN, сервер принят для использования http/1.1
*Сертификат сервера:
* тема: CN=pharealty.com
* дата начала: 10 июля 01:53:04 2021 по Гринвичу
* срок действия: 8 октября 01:53:03 2021 по Гринвичу
* subjectAltName: хост "pharealty.com" соответствует сертификату "pharealty.com"
* эмитент: C=US; O=Давайте зашифруем; CN=R3
* Проверка сертификата SSL в порядке.
} [5 байт данных]
> ПОЛУЧИТЬ/HTTP/1.1
> Хост: pharealty.com
> Пользовательский агент: curl/7.52.1
> Принять: */*
>
{ [5 байт данных]
< HTTP/1.1 200 ОК
< Дата: среда, 08 сентября 2021 г., 17:20:21 по Гринвичу
< Сервер: Апач
< Обновление: h2,h2c
< Соединение: Обновление
< Set-Cookie: PHPSESSID=1mv9jqka4n7c7fb6qmtavfsgue; путь=/
< Истекает: четверг, 19 ноября 1981 г., 08:52:00 по Гринвичу.
< Cache-Control: без сохранения, без кэширования, с обязательной повторной проверкой
<Прагма: без кеша
< X-Pingback: https://pharealty.com/xmlrpc.php
<Ссылка: <https://pharealty.com/wp-json/>; rel="https://api.w.org/"
<Ссылка: <https://pharealty.com/wp-json/wp/v2/pages/48>; отн = "альтернативный"; тип = «приложение / json»
< Ссылка: <https://pharealty.com/>; отн = короткая ссылка
< Set-Cookie: phaLandingPage=%2F; expires = вторник, 08 марта 2022 г., 17:20:21 по Гринвичу; Максимальный возраст=15638400; путь=/
< Варьировать: Accept-Encoding
< Transfer-Encoding: фрагментировано
< Тип содержимого: текст/html; кодировка = UTF-8
<
{ [7 байт данных]
* Curl_http_done: называется преждевременным == 0
* Соединение №0 с хостом pharealty.com осталось нетронутым

Похоже, что сначала он работает отлично, а затем возвращается к HTTP/1.1.

Насколько я могу судить, у меня достаточно новая версия OpenSSL. И хотя эта страница, о которой я упоминал ранее настоятельно рекомендует версию apache выше 2.4.25, мне не удалось обновить apache до чего-либо, кроме 2.4.25.

Нужно ли мне устанавливать новый SSL-сертификат после переключения? Является ли версия apache причиной проблем?

Я протестировал сайт на нескольких тестовых сайтах http/2, и каждый раз он терпит неудачу.

djdomi avatar
флаг za
Пожалуйста, срочно обновите свой сервер, Stretch не работает - вы включили его вообще или только на определенном хосте? по умолчанию не означает, что он работает для всех в целом.
djdomi avatar
флаг za
Дополнительное обновление: проверьте свою ситуацию: https://www.howtoforge.com/how-to-enable-http-2-in-apache/
hyjinx avatar
флаг ve
@djdomi да, я не могу поверить, что не обновил ОС. Удалось обновить все остальное, кроме этого, боже. Я обновляюсь до Debain 10 buster. Должен ли я изменить конфигурацию, чтобы использовать вместо нее звездочку? Я не могу вспомнить, как и почему в настоящее время установлено значение ```_default_```.
djdomi avatar
флаг za
Я бы сначала обновил, затем обновил, а также добавил заголовок протокола и vhost.
hyjinx avatar
флаг ve
@djdomi после обновления до Debian 10 buster и следуя инструкциям по предоставленной вами ссылке, я смог заставить все работать. Я пытался заставить его работать с Debian 10 и PHP 7.4, но не смог. Использование PHP 7.3 сработало, потому что доступен php7.3-fpm. Но после отката на 7.3 с 7.4 пришлось заново устанавливать все расширения PHP. Команды для отключения PHP, включения PHP-FPM, отключения mpm_prefork и включения mpm_event — вот что помогло найти мое решение. Если вы опубликуете свой комментарий как ответ, я отмечу его как ответ и получу вам баллы.
djdomi avatar
флаг za
Я сделал это, пожалуйста, обновите вопрос, если у вас все еще есть проблема, и да, вам, возможно, придется установить необходимые модули для каждой версии php отдельно, вы можете увидеть [мой скрипт сайта github] (https://raw.githubusercontent .com/djdomi/php-install/master/run.sh), чтобы установить все распространенные модули.
Рейтинг:0
флаг za

Обновление до поддерживаемой ОС

Вы использовали Debian Stretch, основная поддержка которого ИМХО уже EOL. (Конец жизни)
Исправления безопасности остаются доступными до тех пор, пока 2022-06-30.

Изменить модуль обработки Apache

sudo a2dismod mpm_prefork
sudo a2enmod mpm_event

Включить модуль SSL и http2

sudo a2enmod ssl  
судо a2enmod http2  

Включить поддержку http2 глобально или через vhost

Добавьте в Apache2.conf:

Протоколы h2 http/1.1

Или отредактируйте vhost и добавьте Протоколы h2 http/1.1

<VirtualHost *:443>
  ServerName example.com
  ServerAlias www.example.com
  DocumentRoot /var/www/public_html/example.com
  SSLEngine on
  SSLCertificateKeyFile /path/to/private.pem
  SSLCertificateFile /path/to/cert.pem
  SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
  Protocols h2 http/1.1 #add this here
</VirtualHost>

Напомните перезагрузить сервер Apache.

sudo systemctl перезапустить apache2

чтобы получить все версии php, вы можете заглянуть в мой скрипт bash

https://raw.githubusercontent.com/djdomi/php-install/master/run.sh

Справка

Касательно это руководство

hyjinx avatar
флаг ve
Ага. Обновить Debian, а затем снова пройти все этапы было хитростью. Я использовал PHP 7.4, но не мог продолжать использовать его, потому что не было модуля php7.4-fpm, который можно было бы включить после отключения php7.4. Поэтому я вернулся к PHP 7.3, и переход на HTTP/2 был завершен.Оставалось только установить все недостающие расширения PHP 7.3. Все тестовые сайты теперь дают положительный результат на HTTP/2. А оценка скорости мобильной страницы подскочила на 12 пунктов в Google Page Speed ​​Insights после HTTP/2. Спасибо за вашу помощь. Не могу поверить, что не подумал обновить ОС.
djdomi avatar
флаг za
php7. 4-fpm должен быть доступен после запуска моего скрипта, наверняка, даже я думаю, что php8 тоже

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.