我有一台 Debian 10(与 Debian 9 有完全相同的问题),运行 Apache 2.4.38 Web 服务器。Apache 模块mpm_event
和http2
已安装,网站通过 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/