Apache服务器启用HTTP/2支持
本文简单介绍了Ubuntu Server下Apache服务器启用HTTP/2支持的方法,亦可直接参考这里(英文)
关于HTTP/2
HTTP/2是自HTTP/1.1于1999年发布以来对HTTP协议的首次更新,其标准于2015年发布在RFC 7540,目前大多数浏览器,包括Chrome、Firefox、Edge、IE 11等均支持HTTP/2
HTTP/2包括TLS 1.2及以上版本加密连接下的h2,以及非安全连接下的h2c,其保留了HTTP/1.1的大多数语义,二者最大的区别在于HTTP/2使用二进制帧来传输数据,而非明文。同时,HTTP/2还支持多路复用,在同一个TCP连接下传输多个请求;
服务器推送(Server Push)可以使服务端预先推送所需资源到客户端,而不用等待客户端主动发送请求。关于HTTP/2的其他一些特性及其具体解释可自行谷歌搜索,在此不详述。
Apache服务器启用HTTP/2
Apache从2.4.17版本开始支持HTTP/2,因此在启用前请确认Apache版本符合要求。以及,由于多数主流浏览器仅在TLS连接下支持HTTP/2,因此请保证系统的SSL服务支持ALPN(应用层协议协商),如OpenSSL版本高于1.0.2,并配置好站点的HTTPS连接
首先,本文中使用的系统配置环境为Ubuntu Server 18.04 LTS,其他环境请自行替换成等价的步骤
启用Apache的http2模块并配置站点
使用sudo a2enmod http2
来添加Apache模块,使用vim或者其他文本编辑器打开虚拟主机的配置文件,添加Protocols h2 http/1.1
,配置文件应该类似如下形式(略去了部分内容)
1 |
|
修改完成后,执行sudo systemctl reload apache2
使Apache重新加载修改后的配置文件
切换Apache的工作模式
完成配置文件的修改后,如果Apache运行在prefork模式下,则还需要切换到event模式,最新的Apache应该都支持这个模式。在prefork模式下,同一时间一个子进程连接只能响应一个请求,而客户端可能会同时发送多个请求,因此某些请求会被挂起,
这种情况下,http2模块将不会工作。
切换到event模式的动作也很简单,sudo a2dismod mpm_prefork
禁用prefork模式后用sudo a2enmod mpm_event
启用event模式即可,在这种模式下,还需要安装php-fpm并使用sudo a2enmod proxy_fcgi
以启用php的FastCGI,保证php在event模式下的解析
检测HTTP/2的启用情况
一个方便的方法是打开Edge浏览器,打开开发者工具栏并访问站点,可以查看到协议类型