一个 HTTP/2 的故事
创始人
2024-03-02 01:35:47
0

大约一个月前,有人在我所在的 IRC 频道中提到了 HTTP/2。由于某种原因,我从未听说过它,而且新协议的一些功能(比如无需打开多个 TCP 连接就能复用请求)似乎很酷。

说实话,我刚刚重写了管理我们备份程序的 Puppet 代码,启用 HTTP/2 似乎是一种转向另一个大型项目之前有效的拖延方式。这有多难?

结果我花了大约 25 个小时来完成。坐下来穿上舒适的拖鞋,听听这个 HTTP/2 的故事!

被诅咒的 HTTP/1.1

当我第一次看到如何在 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_phpmpm_prefork 并启用 mpm_eventmod_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中国 荣誉推出

相关内容

不支持HTTP/2(请安装...
要解决不支持HTTP/2的问题,您可以按照以下步骤安装Twiste...
2025-01-11 22:30:47
Bitbucket:HTT...
试着使用HTTP / 1.1代替HTTP / 2。您可以在Git中...
2024-12-19 11:30:23
AWS Lambda支持H...
是的,AWS Lambda支持HTTP/2,可以使用其中的服务器推...
2024-11-17 06:31:31
Axum中如何使用HTTP...
Axum是一个用于编写异步HTTP服务的Rust框架,可以通过以下...
2024-09-29 09:30:59
Apache日志显示我们正...
要解决这个问题,你需要在服务器上进行一些配置更改。具体步骤如下:首...
2024-09-06 10:03:04
网络协议(十三):HTTP...
网络协议系列文章 网络协议(一):基本概念、计算机之...
2024-05-31 20:49:17

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...