Конфигурация HTTP/2 не запускается после включения mod_http2 и установки протоколов в файле conf

HTTP/2, кажется, не работает после правильной установки.

Я использую CentOS 7.

Я установил последнюю версию Apache, версию httpd-2.4.35-5.el7.x86_64, и пытался заставить работать HTTP/2.

Для этого я вижу, что нам нужно запустить http2_module. То есть активно и работает. Я полагаю, что подтвердил это, выполнив команду httpd -M. http2_module (общий) указан под этими модулями.

Следующее, что я знаю, это добавить Protocols h2 h2c http/1.1 над тегом <VirtualHost ...>. Я сделал это также.

Наконец, я изменил свой URL-адрес CURL, но все еще получаю HTTP/1.1.
Команда CURL: curl -vsko /dev/null --http2 https://www.thehomepainter.com

Краткий ответ от CURL:

GET / HTTP/1.1 Host: www.thehomepainter.com User-Agent: curl/7.64.0 Accept: /

‹ HTTP/1.1 200 ОК

Частично из httpd.conf

Protocols h2 h2c http/1.1
<VirtualHost *:443>
    SSLEngine on
    ServerAdmin ### omitted ###
    ServerName thehomepainter.com
    ServerAlias www.thehomepainter.com
    DocumentRoot /var/www/html/
    Options -Indexes

    ProxyRequests off
    ProxyPreserveHost On
    AllowEncodedSlashes NoDecode

    ProxyPass "/" "http://localhost:3000/"
    ProxyPassReverse "/" "http://localhost:3000/"

    RequestHeader set X-Forwarded-Proto "https"
    RequestHeader set X-Forwarded-Port "443"

    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile ### omitted ###
    SSLCertificateKeyFile ### omitted ###
    SSLCertificateChainFile ### omitted ###

    # i have tried this here as well
    # Protocols h2 h2c http/1.1
</VirtualHost>

Protocols h2 h2c http/1.1
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName thehomepainter.com
    ServerAlias www.thehomepainter.com
    DocumentRoot /var/www/html
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =thehomepainter.com [OR]
    RewriteCond %{SERVER_NAME} =www.thehomepainter.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

    # i have tried this here as well
    # Protocols h2 h2c http/1.1
</VirtualHost>

Таким образом, ожидаемый результат заключается в том, что HTTP/2 будет работать. Однако это не так, и я понятия не имею, почему.


person tuffant21    schedule 16.02.2019    source источник


Ответы (1)


После просмотра журнала ошибок я наконец нашел проблему.

[http2:warn] [pid 7155] AH10034: The mpm module (prefork.c) is not supported by mod_http2. The mpm determines how things are processed in your server. HTTP/2 has more demands in this regard and the currently selected mpm will just not do. This is an advisory warning. Your server will continue to work, but the HTTP/2 protocol will be inactive.

Чтобы решить эту проблему, я отредактировал файл /etc/httpd/conf.modules.d/00-mpm.conf.

Закомментируйте эту строку: LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

И раскомментируйте нижнюю строку: LoadModule mpm_event_module modules/mod_mpm_event.so

Перезапустите апач, и тогда он работает.

person tuffant21    schedule 16.02.2019