Включение http / 2 в Apache 2.4 не работает - PullRequest
0 голосов
/ 09 октября 2018

Мы пытаемся включить http / 2 в Apache 2.4, но безуспешно.Операционная система сервера - FreeBSD 11.2, а версия OpenSSL - 1.0.2o.

У нас есть действительный и действительный сертификат SSL с оценкой A + на Qualys SSL Server Test.

В журнале нет ошибокфайлы, сервер перезагружается без проблем и ошибок.Доступ к веб-сайту с помощью https: // работает, но браузер всегда понижает его до http / 1.1.

У нас есть это в нашем виртуальном разделе:

<Directory />
    Require         all granted
    AllowOverride   All
    SSLOptions      +StdEnvVars
</Directory>

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions      +StdEnvVars
</FilesMatch>

H2Direct on
Protocols h2 h2c http/1.1

Options                    None
SSLEngine                  On
SSLHonorCipherOrder        On
SSLSessionTickets          Off
SSLCompression             Off
SSLCipherSuite             "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"
SSLProtocol                All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

SSLCertificateFile          "/usr/local/www/apache24/certs/server.crt"
SSLCertificateKeyFile       "/usr/local/www/apache24/certs/server.key"
SSLCertificateChainFile     "/usr/local/www/apache24/certs/intermediate.crt"

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff

--- ОБНОВЛЕНИЕ ---

root@srv04:/usr/home/user # httpd -V
Server version: Apache/2.4.35 (FreeBSD)
Server built:   unknown
Server's Module Magic Number: 20120211:82
Server loaded:  APR 1.6.3, APR-UTIL 1.6.1
Compiled using: APR 1.6.3, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     prefork
threaded:     no
forked:     yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses disabled)
-D APR_USE_FLOCK_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/usr/local"
-D SUEXEC_BIN="/usr/local/bin/suexec"
-D DEFAULT_PIDLOG="/var/run/httpd.pid"
-D DEFAULT_SCOREBOARD="/var/run/apache_runtime_status"
-D DEFAULT_ERRORLOG="/var/log/httpd-error.log"
-D AP_TYPES_CONFIG_FILE="etc/apache24/mime.types"
-D SERVER_CONFIG_FILE="etc/apache24/httpd.conf"

--- ALPN FROM QUALSYS ---

ALPN    Yes   http/1.1

--- CHROME ---

Chrome 49 / XP SP3 RSA 2048 (SHA256) TLS 1.2 > http/1.1     TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ECDH secp256r1  FS
Chrome 69 / Win 7 R RSA 2048 (SHA256) TLS 1.2 > http/1.1    TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 ECDH secp256r1  FS
Chrome 70 / Win 10 RSA 2048 (SHA256) TLS 1.2 > http/1.1     TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 ECDH secp256r1  FS

1 Ответ

0 голосов
/ 09 октября 2018

Apache не поддерживает HTTP / 2 с prefork MPM. Это было добавлено в 2.4.27 :

*) СОВМЕСТИМОСТЬ: mod_http2: Отключить и дать предупреждение при использовании Prefork.Сервер продолжит работу, но HTTP / 2 больше не будет согласовываться.[Stefan Eissing]

Prefork MPM в основном несовместим со способом реализации HTTP / 2 .После перезапуска в журналах ошибок должно появиться предупреждение, сообщающее об этом.

Prefork также очень старый MPM, который работает медленно, поэтому те сайты, которые хотят HTTP / 2, вероятно, вообще не должны его использовать.На самом деле его следует использовать только в том случае, если вы работаете с не поточно-ориентированными PHP-приложениями (поточно-ориентированные приложения должны перейти на Event MPM и php-fm (именно так работает Nginx, поскольку он не предлагает аналога prefork).К сожалению, это также значение по умолчанию во многих установках Apache (только в том случае, если люди используют PHP-небезопасные приложения?), И часто вы не можете изменить его, не загрузив и не перекомпилировав его.

Подробнее о MPM здесь: https://serverfault.com/questions/383526/how-do-i-select-which-apache-mpm-to-use

...