终于吃到了心心念念 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 证书,就完美了。
发表回复