译自: https://veronneau.org/a-tale-of-http2.html
作者: Louis-philippe Véronneau
译者: geekpi

大约一个月前,有人在我所在的 IRC 频道中提到了 HTTP/2 。由于某种缘故原由,我从未听说过它,而且新协议的一些功能(比如无需打开多个 TCP 连接就能复用要求)彷佛很酷。
说实话,我刚刚重写了管理我们备份程序的 Puppet 代码,启用 HTTP/2 彷佛是一种转向另一个大型项目之前有效的拖延办法。这有多难?
结果我花了大约 25 个小时来完成。坐下来穿上舒适的拖鞋,听听这个 HTTP/2 的故事!
当我第一次看到如何在 Apache 上启用 HTTP/2 时,这彷佛是一项非常大略的任务。文档提到加载 http2 模块并通过如下配置文件确保新协议优先:
Protocols h2 h2c http/1.1
H2Push on
H2PushPriority after
H2PushPriority text/css before
H2PushPriority image/jpeg after 32
H2PushPriority image/png after 32
H2PushPriority application/javascript interleaved
这当然很随意马虎。纵然 Apache 中的所有内容都已精确设置,网站仍旧利用的是 HTTP/1.1。不过,显然我做得没错,由于我的网站现在发送了一个新的 HTTP 头:Upgrade: h2, h2c。
在摧残浪费蹂躏了大量韶光调试 TLS 密钥(HTTP/2 与 TLS 1.1 不兼容 )之后,我终于创造问题是没有利用精确的 Apache 多进程处理模块。
事实证明,在利用 mpm_prefork(默认 MPM)时,Apache 不会利用 HTTP/2,由于 mod_http2 不支持它。只管 Apache 还有两个其他的 MPM,但只有 mpm_prefork 支持 mod_php。溘然之间,添加对 HTTP/2 的支持意味着我们将要把所有的 PHP 网站切换到 PHP-FPM。
掉进兔子洞在很长一段韶光里,一位好友一贯试图让我相信 PHP-FPM 的优点。虽然表面上看起来很好,但我从来没有真正试过。它看起来很繁芜。常规的 mod_php 做得很好,还有其他事情须要我把稳。
事实上,这次的 HTTP/2 事宜是让我研讨它的一个契机。在我理解了 FPM 池的事情事理后,它实际上很随意马虎设置。由于我不得不重写我们用于支配网站的 Puppet 配置文件,我也借此机会巩固了一堆东西。
PHP-FPM 许可你在不同的 Unix 用户下运行网站来增加隔离性。最主要的是,我决定是时候让我们做事器上的 PHP 代码以只读模式运行,并且不得不为我们的 Wordpress、Nextcloud、KanBoard 和 Drupal 实例调度一些东西来减少报错。
过了很永劫光通过 Puppet 的自动任务后,我终于能够全部关闭 mod_php 和 mpm_prefork 并启用 mpm_event 和 mod_http2。PHP-FPM 和 HTTP/2 带来的速率提升不错,但更让我感到高兴的是这次磨练增强了我们的 Apache 处理 PHP 的能力。
via: https://veronneau.org/a-tale-of-http2.html
作者: Louis-Philippe Véronneau 选题: lujun9972 译者: geekpi 校正: wxy
本文由 LCTT 原创编译, Linux中国 名誉推出
点击“理解更多”可访问文内链接