我们应该使用 Apache 的 HTTP2 吗?

Dav*_*rus 7 reverse-proxy apache-2.4 http2

我想将 HTTP2 与 Apache 2.4.16(可能需要升级到 2.4.17)一起使用,并在官方 Apache 页面上偶然发现了此评论。

警告

这个模块是实验性的。相对于其他标准模块,它的行为、指令和默认值在不同版本之间会发生更多变化。鼓励用户查阅“CHANGES”文件以获取潜在更新。

另一方面,许多其他人正在制作有关如何启用它的教程。那么使用它安全还是我们应该等待?

另外,我们可以将 HTTP2 与反向代理结合使用吗?

Bar*_*ard 8

更新:从 Apache 2.4.26 开始,mod_http2 不再被视为实验性的。下面的答案已更新以反映这一点。

另请注意, mod_http2_proxy 仍被认为是实验性的。

实验标签是在首次添加功能时添加的,正如文本所解释的,警告实施、选项和 API 可能会发生变化。因此,如果使用实验性功能,则在安装任何后续更新时应仔细阅读更改文件,以确保您了解需要进行的任何更改。

实验标签并不能意味着实现是不稳定的。不稳定的选项通常不会直接添加到主 Apache 源代码树中,而是作为单独的可安装模块处理。

也就是说,要使用 HTTP/2,您至少需要升级到 2.4.17,但实际上应该升级到最新的(在撰写本文时为 2.4.26),因为该模块正在发生很大变化,有许多错误并且自发布以来的性能改进,甚至解决了许多 CVE(包括:2016-15462016-87402017-7659)。这并不是说它特别有缺陷或危险,而且 Apache(以及几乎所有其他软件)中还有很多其他 CVE,但这意味着您确实应该运行最新版本。

您还需要针对 OpenSSL 1.0.2 进行编译以与 Chrome 和 Firefox 一起使用(因为它们只允许较新的 ALPN 协议而不是较旧的 NPN 协议来协商 HTTP/2 连接),这可能是大多数包的额外痛苦经理还不包括这个。从 2.4.26 开始,Apache 还支持 OpenSSL 1.1。

运行较新的版本,并从源代码编译,而不是从包管理器(例如 yum 或 APT)编译确实需要一些额外的努力和纪律(因为它们不会那么容易安装或修补),这超出了您的问题范围,但不是轻而易举地进入的东西。这一切都假设您使用的是 Linux。如果您使用的是 Windows,那么您可能已经单独下载和安装。

终于到了你问题的真正症结所在。在 Apache 2.4.26 版本中,主mod_http2模块的实验警告被删除,尽管它仍然适用于较新的mod_proxy_http2模块。自 2.4.17 以来,我个人一直在我的个人博客站点上运行 HTTP/2,并且从未遇到任何实际问题。对我来说似乎足够稳定。再说一次,我没有获得大量流量,如果流量下降对我来说也没什么大不了的。我会在真正的生产站点上运行它吗?可能直到那个实验警告被删除(2.4.26)。再说一次,发生的唯一方法是人们尝试一下。如果 HTTP/2 确实引起问题,它也很容易关闭。基本上,这完全取决于您的风险偏好。您可以阅读(和订阅)GitHub 上的已知问题列表(https://github.com/icing/mod_h2/issues)并且模块作者非常敏感且乐于助人。

不确定您对反向代理功能有什么要求。自 2.4.21 Apache 引入mod_proxy_http2处理 HTTP/2 后端以来,但我会说它的使用和测试更少(仍标记为实验性)。它也没有那么有用:HTTP/2 的主要好处是在高延迟网络(即客户端到前端)上而不是在低延迟前端到后端连接上。因此,现在我将在 Apache 上使用 HTTP/2,但将与任何后端基础设施的反向代理连接保持为 HTTP/1。是的,这绝对可以正常工作,如果这就是您要问的,尽管这个问题的答案声称一直使用 HTTP/2 可能有好处