终于吃到了心心念念 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_value
和php_admin_value
会导致出错。但是这个东西确实很有用,比如设置个open_base_dir
什么的。
直接写php_admin_value XXXXX XXXXXX
是mod_php
的写法,但是这个模块已经被我们禁用了。那么在php_fpm
里面怎么设置php_admin_value
呢?
多方Google,最后得到一句这样的话:
SetEnv PHP_ADMIN_VALUE "open_basedir=/var/www/html/:/tmp/:/proc/:/dev/urandom"
照葫芦画瓢改一下把其他php_admin_value
改一下就好了。
然后再配置个ssl证书,就完美了。
发表回复