Назад | Перейти на главную страницу

Согласование ALPN с выбором http / 1.1 вместо h2

Я создал каплю DigitalOcean с предустановкой «LAMP 18.04» и выполнил все обновления. Настроил новый виртуальный хост и использовал certbot для настройки HTTPS. Пока все работает нормально. Затем я попытался включить HTTP2:

Однако браузеры по-прежнему используют HTTP / 1.1 при подключении к сайту (с отключенным кешированием). При беге curl --http2 -v https://example.com (домен запутан) печатается следующее:

* Connected to example.com (1.1.1.1) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
...
* SSL connection using TLSv1.2 / ECDHE-RSA-CHACHA20-POLY1305
* ALPN, server accepted to use http/1.1

... And in headers:
< Upgrade: h2
< Connection: Upgrade

Более того, https://tools.keycdn.com/http2-test показывает следующее:

У меня вопрос - почему выбран http / 1.1? Кроме того, почему инструмент считает, что HTTP2 / ALPN отключен? Вот полная конфигурация VHost:

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName example.com
        DocumentRoot /var/www/example/www
        Protocols h2 http/1.1

        ErrorLog ${APACHE_LOG_DIR}/example/error.log
        CustomLog ${APACHE_LOG_DIR}/example/access.log combined

        <IfModule mod_dir.c>
            DirectoryIndex index.php index.pl index.cgi index.html index.xhtml index.htm
        </IfModule>

        <FilesMatch "^index\.html$">
            Include no-cache.conf
        </FilesMatch>

Include /etc/letsencrypt/options-ssl-apache.conf
ServerAlias www.example.com
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
</IfModule>

В большинстве дистрибутивов по-прежнему используется предварительная вилка. MPM. (Если вам действительно не нужно использовать mod_php с действительно дрянным древним кодом, нет причин делать это в наши дни.)

Поддержка HTTP / 2 в Apache в сочетании с prefork MPM поставляется с таким много ограничений что на практике он не предоставляет никаких преимуществ HTTP / 2. Наверное, поэтому при тестировании заголовки указывают HTTP / 2 и ALPN, offering h2 поддержка, но дальнейшее тестирование показывает неудачу.

Переключиться на другой MPM и вы должны заставить HTTP / 2 действительно работать.