服务器切换到HTTP2

花时间整理了一下服务器,期间在群里看到学长聊到HTTP/2,看了一下,发现自己的服务器还都是HTTP/1.1,于是也切换到了HTTP/2。

Server

> Linux     --- Arch Linux x86_64
> Kernel    --- 4.18.8-arch1-1-ARCH
> Apache    --- 2.4.34-1
> PHP       --- 7.2.10-1

HTTP/2

作为HTTP协议的第二个主要版本,2015年正式发布,到年末时主要的浏览器就已经支持并启用。

HTTP/2比较突出的特点有多路复用,头部压缩,服务器推送等,主要就是为了提升HTTP协议的性能表现。

HTTP/2本身允许非加密的HTTP协议(h2c),未强制要求使用加密,但大多数浏览器只实现了通过TLS加密的HTTP/2协议(h2),h2c 相当于被废弃。

更多相关信息可以参考维基百科:HTTP/2

切换过程

服务器之前使用libphp和mpm_prefork模块,只需要从官方源安装php-apache即可在Apache下使用PHP。

但是mpm_prefork_module和HTTP/2并不兼容,所以我换用了ArchWiki中指明的第二种方法,利用php-fpm和mod_proxy_fcgi处理PHP,具体步骤如下:

问题

以上一系列操作结束后尝试访问网页,却发现打不开,使用systemctl status httpd查看,发现错误出现在两个地方:

两处报错原因相同。

因为之前是相当于使用Apache的一个模块对PHP进行处理,所以在Apache负责读取的配置文件中可以设置PHP的选项。但是现在我们是让Apache把php文件的解析请求转发给php-fpm,由php-fpm对PHP进行处理,所以在Apache中将无法再设置PHP解释器的选项,因此需要对之前的配置文件进行适当修改:

除此之外需要注意的地方还有:

效果

只是单纯开启HTTP/2,没有进行额外配置的话,主要是多路复用和头部压缩两个特点对性能的提升,因此请求数量较少的网页,例如whoisnian.com的提升效果不是很明显,打开时间主要受到的还是延迟的影响。而请求数量较多的网页,例如cloud.whoisnian.com登录后首次打开主界面需要100多个请求,花费的时间从15s减少到了11s,提升效果还是比较明显的。