配置的 Apache 2.4.38 Web 服务器上未启用 HTTP/2

配置的 Apache 2.4.38 Web 服务器上未启用 HTTP/2

我有一台 Debian 10(与 Debian 9 有完全相同的问题),运行 Apache 2.4.38 Web 服务器。Apache 模块mpm_eventhttp2已安装,网站通过 HTTPS 提供服务。

我在每个网站的每个 Apache 虚拟主机 conf 文件中都添加了 http2 行,例如:

<VirtualHost *:12080>
    # HTTP2
    Protocols h2 h2c http/1.1
    ...

编辑:当我使用基于 Web 的在线工具进行测试时,我得到的答案是“不支持 HTTP/2 协议/不支持 ALPN 扩展”。

当我 curl 我的其中一个网站(curl -I -k https://mywebsite.com)时,我得到以下响应,显然仍处于 HTTP/1.1 中:

HTTP/1.1 200 OK
Date: Tue, 30 Jul 2019 03:14:37 GMT
Server: Apache/2.4.38 (Debian)
Set-Cookie: PHPSESSID=7ulo4hj17ukek6s15g99fc2812; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Upgrade: h2,h2c
Connection: Upgrade
Vary: Accept-Encoding
Content-Type: text/html; charset=UTF-8
Set-Cookie: C00=; Expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/

我是不是忘记了 HTTP/2 的某些东西?

/etc/apache2/mods-enabled/http2.conf以防万一,这也是我的文件的内容:

<IfModule !mpm_prefork>
    Protocols h2 h2c http/1.1
</IfModule>

编辑:ALPN 似乎未启用(不知道是否可以解释)并且我的 OpenSSL 版本是 1.1.1c。

答案1

服务器标头:Upgrade: h2,h2c表明 HTTP/2 协议可用的服务器端...

问题在于你的curl命令行,以及 http/2 通常是协商的,并不总是立即使用

https://curl.haxx.se/docs/http2.html

curl 提供--http2命令行选项来启用 HTTP/2。

curl 提供--http2-prior-knowledge命令行选项以启用 HTTP/2 而无需升级 HTTP/1.1。

答案2

确保您的服务器上是否启用了该模块。

#cat /etc/apache2/mods-enabled/http2.load 

确保有以下行:

LoadModule http2_module /usr/lib/apache2/modules/mod_http2.so

# apache2ctl -M | grep http2 - 如果启用,输出类似于以下内容: http2_module (shared)

答案3

您是否启用了 http2 Apache 模块并重新启动了 Apache 服务?

sudo a2enmod http2 sudo systemctl restart apache2

参考:https://www.howtoforge.com/how-to-enable-http-2-in-apache/

相关内容