HTTP2支持
启用 HTTP2 协议支持
准备
这些天一直在群里看阿忆在研究 LSWS(LiteSpeed Web Server),说是支持 HTTP/3,访问处理速度能达到现有的 30-50 倍以上(顺便催更@GOOD-AN 的 WordPress 优化教程),好奇搜索了一下,发现早在 2015 年 HTTP/2 协议就已经公布了,具体速度对比可以参考这个站点(HTTP/2: the Future of the Internet | Akamai)。于是决定对我的站点启用 HTTP/2 协议试图提高访问速度(然后发现微乎其微),在 apache 的完善 docs 和搜索引擎的帮助下可算成功了,现在记录一下遇到的坑和操作。
坑 1:MPM 配置
第一步需要确定自己的 apache 版本和 openssl 版本是否支持 HTTP/2 协议,httpd 的版本至少需要 2.4.17,openssl 版本至少需要 1.0.2e,如果是自己编译安装的 httpd 则需要添加编译属性
-enable-http2 |
然后启用 mod_http2 模块并在 vhost 里面添加 Protocols h2 http/1.1(For HTTPS)或者 Protocols h2c http/1.1(For HTTP)即可,重启刷新,欸?怎么还是 HTTP/1.1?
翻看了一下 Apache 的文档,在 HTTP/2 指南-MPM 配置中找到了原因:
httpd随附的所有多处理模块均支持HTTP / 2。但是,如果您使用的是preforkmpm,则会受到严格的限制。 |
好嘛,那就不用 prefork 这个 mpm 好了,修改 00-mpm.conf 注释掉LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
,然后启用LoadModule mpm_event_module modules/mod_mpm_event.so
坑 2:PHP 模块配置
修改完再刷新访问,测试站点完美使用 H2 协议了,看来也很简单的嘛,光速把博客等站点的配置文件也改了,然后博客就 500 了。。。出了问题就改撒,翻了下 error.log,提示为
[core:alert] [pid 918798:tid 140078739285760] [client 222.133.217.243:62909] /var/www/html/blog/.htaccess: Invalid command 'php_value', perhaps misspelled or defined by a module not included in the server configuration |
嗯,,,WTF???怎么能不支持这个东西,我随即访问我测试站点的 info.php 发现也提示 500ERROR,这就超出我的处理能力了,经过一番搜索得知,PHP 默认是作为 Apache 的一个模块运行的,启用 event_mpm 则会通过 php-fpm 处理 PHP 站点,那也简单啊,禁用模块加载 PHP 启用 PHP-fpm 就好了撒。
遂注释掉 15-php.conf 的LoadModule php7_module modules/libphp7.so
(后来发现不注释也行,因为它的调用条件为非 PHP5 和 prefork),然后systemctl start php-fpm
就好了撒,简单难不倒我。
坑 3:PHP-FPM
然后再访问 info.php 发现直接变成下载文件了 23333,这个问题倒是清楚为 Apache 未启用 PHP 后端功能直接返回 PHP 文件,不应该啊,难不成 PHP-fpm 模块也有问题?再去搜索,发现 Apache 连接 PHP-fpm 还需要自行配置的,依照某篇 CSDN 文章(翻了好多都是这样配置的,也不知道从哪里抄的)进行了如下配置
1. 修改php-fpm配置文件(etc/php-fpm.d/www.conf) |
再重启 apache 和 php-fpm,访问 info 站点发现报错变成了 503,说明方法似乎行之有效(?),又翻看了一下日志,报错变成了连接 php-fpm 失败:
[Thu Feb 03 09:22:34.580738 2022] [proxy:error] [pid 922507:tid 140666578851584] (111)Connection refused: AH00957: FCGI: attempt to connect to 127.0.0.1:9000 (*) failed |
妈卖批!怎么连接本地服务还能出现错误呢!算了,这 HTTP/2 我不开也罢了。光速把配置文件改成原来的然后睡觉去了。睡醒思来想去还是觉得有些许遗憾,算了开电脑继续搞!小爷就不信了搞个 HTTP/2 都能难倒,这一次长了个心眼,既然国内的都是同质教程抄来抄去那就去看看国外教程好了,遂在 bing 国际版检索“how can i link php-fpm with apache in centos”,果然依照第一篇文章(How to Install Apache with PHP-FPM on CentOS 8 – TecAdmin)配置成功!
具体操作
1. 修改MPM(etc/httpd/conf.module.d/00-mpm.conf) |