为了在我的 16.04 服务器上启用 HTTP/2,我按照以下方式操作本指南按照 Google 的建议,但出于某种原因,我的网站仍然通过 HTTP/1.1 提供服务。我反复检查一切是否正确,多次重启服务(和服务器!),但都无济于事。
http2
mod 在 apache2 中已启用。Protocols h2 h2c http/1.1
已添加到我的站点配置文件中(并且刚刚在我的 apache.conf 中测试过)- 我已经重新启动服务和服务器
我是否遗漏了什么?
编辑:
刚刚运行curl -I -k --http2 https://framework.jacob.rocks/
并收到以下内容...
HTTP/1.1 200 OK
Date: Thu, 20 Jul 2017 17:12:52 GMT
Server: Apache/2.4.27 (Ubuntu)
Upgrade: h2,h2c
Connection: Upgrade
Link: <https://framework.jacob.rocks/wp-json/>; rel="https://api.w.org/"
Link: <https://framework.jacob.rocks/>; rel=shortlink
X-TEC-API-VERSION: v1
X-TEC-API-ROOT: https://framework.jacob.rocks/wp-json/tribe/events/v1/
X-TEC-API-ORIGIN: https://framework.jacob.rocks
Content-Type: text/html; charset=UTF-8
答案1
搞清楚了,显然这只是一个mpm_prefork
不支持 HTTP/2 的模块问题,从 Apache 开始2.4.27
。我跟着本指南现在它起作用了!
答案2
Apache2 在 ubuntu 16.04 上默认编译时未支持 http2。
因此,您必须安装它的预编译版本,例如执行以下操作:
sudo add-apt-repository ppa:ondrej/apache2
sudo apt-get update
sudo apt-get dist-upgrade
或者按照下面的方法自己做:
检查 /etc/apt/sources.list 中是否有这些行:
deb-src http://archive.ubuntu.com/ubuntu/ xenial main universe restricted multiverse
deb-src http://security.ubuntu.com/ubuntu xenial-security main universe restricted multiverse
deb-src http://archive.ubuntu.com/ubuntu/ xenial-updates main universe restricted multiverse
如果没有,请添加:
sudo echo 'deb-src http://archive.ubuntu.com/ubuntu/ xenial main universe restricted multiverse
deb-src http://security.ubuntu.com/ubuntu xenial-security main universe restricted multiverse
deb-src http://archive.ubuntu.com/ubuntu/ xenial-updates main universe restricted multiverse' >> /etc/apt/sources.list
然后安装一些所需的软件包(libnghttp2-dev 是提供 http2 支持所必需的):
sudo apt-get install curl devscripts build-essential libnghttp2-dev
sudo apt-get build-dep apache2
sudo apt-get source apache2
然后编译:
cd apache-2.4.18
sudo su
./debian/rules binary
在此阶段,您可以安装生成的 deb,但它们可能会被稍后的安全更新覆盖,因此我们只需复制已生成的模块 http2 并创建一个文件以便能够启用它:
cp debian/apache2-bin/usr/lib/apache2/modules/mod_http2.so /usr/lib/apache2/modules/
然后创建文件http2.load来加载模块。
echo 'LoadModule http2_module /usr/lib/apache2/modules/mod_http2.so
<IfModule http2_module>
LogLevel http2:info
</IfModule>' > /etc/apache2/mods-available/http2.load
然后启用模块
a2enmod http2
然后重启apache
service apache2 restart
现在您就可以出发了。
答案3
如果你已经为网站启用了 SSL,则必须定义
Protocols h2 http/1.1
在 v-host 和 ssl conf 文件中,否则它将不起作用。