一个 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

热门资讯

“Linux 中国” 开源社区... 这是一个艰难的决定 —— 这不是调侃,而是当你真正做出改变了你十几年生活轨迹的决定时,你就会明白这个...
硬核观察 #1263 德国铁路... #1 德国铁路公司招聘 Windows for Workgroups 3.11 管理员该职位要求了解...
人工智能教程(七):Sciki... 在本系列的 上一篇文章 中,我们用 TensorFlow 构建了第一个神经网络,然后还通过 Kera...
关闭 WSL 中正在运行的 L... 以下是使用 WSL 关闭在 Windows 内运行的 Linux 系统的不同方法。你使用 WSL 在...
MX Linux 23.2 “... 最新的 MX Linux 23.2 小版本更新带来了基本的改进和新增功能。MX Linux 推出了 ...
硬核观察 #1262 网络上最... #1 网络上最古老的软件存档库之一即将关闭美国新墨西哥州立大学(NMSU)最近宣布,即将于 2024...
如何在 RHEL 上通过绑定配... 在 Linux 中,你可以根据自己的需要创建高级网络设置,如 网络绑定 Network Bondin...
Linux Matrix 消息... Matrix 用户可以升级 Fractal 6 了!Fractal 是目前 最好的 Matrix 客...
如何通过 VLC 使用字幕 使用 VLC 媒体播放器播放和管理字幕的新手指南。我是一个超级动漫迷,如果你想观看最新的剧集,那么你...
硬核观察 #1261 X 计划... #1 X 计划在奥斯汀建立内容审核总部据报道,该部门将招聘 100 名全职员工,将主要关注 CSE ...