全站升级 HTTP2

终于吃到了心心念念 HTTP/2。速度有没有快一些呢?

去年就看到 Apache 支持 HTTP2 了,但由于没有默认包含在源里面,需要自己编译 Apache,所以一直没有进行升级。今天突然想起来这件事儿了,就顺手把它搞定吧。

Apache 版本

需要 2.4.24 以上才行。Ubuntu18.04/Debian9 默认带的 Apache 都满足要求。

启用 mod_http2

没错,一句话搞定的:

sudo a2enmod http2

告诉各个 virtualhost 使用 h2

在 virtualhost 文件里面加上这句话:

Protocols h2 h2c http/1.1

这句话的意思是,“优先使用 h2 协议,不能用的话降级为 h2c 协议试试,实在不行 http1.1 你总支持吧?”

然后重启 apache。

改用 FastCGI

按照上面的做法,理论上就应该能启用 h2 了啊,但是浏览器 f12 观察死活都是 http1.1。但是好像请求头里面多了一个 update 什么东西。

仔细找原因……mod_php 不支持 h2……只有 factcgi 支持。那好,我们换!

sudo apt install php-fpm 
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.2-fpm 
sudo a2dismod php7.2
sudo service apache2 restart

注意,上面的 7.2 可能需要替换为你的 PHP 的版本,例如 7.0。Ubuntu16.04 默认是 7.0,Debian9 默认是 7.1,Ubuntu18.04 默认是 7.2。

如果 restart 出错,那么按照错误信息检查一下是不是一些 php_value 导致的。临时禁用一下。下面再说怎么开启。

使用”event” 模式

同上,也是因为 “prefork” 模式不能完全兼容 h2 导致的。这个可以看 log: 如果我们不换用 event,那么 apache 启动 log 里面会说 “prefork 不能完全支持 h2。如需开启 h2,请使用 event 模式”。

sudo a2dismod mpm_prefork 
sudo a2enmod mpm_event 
sudo service apache2 restart 
sudo service php7.2-fpm restart

php_value

上回书说道,使用 php_valuephp_admin_value 会导致出错。但是这个东西确实很有用,比如设置个 open_base_dir 什么的。

直接写 php_admin_value XXXXX XXXXXXmod_php 的写法,但是这个模块已经被我们禁用了。那么在 php_fpm 里面怎么设置 php_admin_value 呢?

多方 Google,最后得到一句这样的话:

SetEnv PHP_ADMIN_VALUE "open_basedir=/var/www/html/:/tmp/:/proc/:/dev/urandom"

照葫芦画瓢改一下把其他 php_admin_value 改一下就好了。

然后再配置个 ssl 证书,就完美了。

参考资料


已发布

分类

作者:

标签

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注