![我们应该使用 Apache 的 HTTP2 吗?](https://linux22.com/image/701431/%E6%88%91%E4%BB%AC%E5%BA%94%E8%AF%A5%E4%BD%BF%E7%94%A8%20Apache%20%E7%9A%84%20HTTP2%20%E5%90%97%EF%BC%9F.png)
我想将 HTTP2 与 Apache 2.4.16 一起使用(可能需要升级到 2.4.17),并在官方 Apache 页面上偶然发现了这条评论。
警告
此模块为实验性模块。与其他标准模块相比,其行为、指令和默认值在不同版本之间可能会有较大变化。建议用户查阅“CHANGES”文件以了解可能的更新。
另一方面,许多人正在制作有关如何启用它的教程。那么使用它安全吗?还是我们应该等待?
另外,我们可以将 HTTP2 与反向代理结合使用吗?
答案1
更新:从 Apache 2.4.26 开始,mod_http2 不再被视为实验性的。下面的答案已更新以反映这一点。
另请注意,mod_http2_proxy 仍被视为实验性的。
实验性标签是在首次添加功能时添加的,正如文本所解释的那样,警告实现、选项和 API 可能会发生变化。因此,如果使用实验性功能,您应该仔细阅读更改文件当您安装任何后续更新时,确保您了解需要进行的任何更改。
实验标签不是意味着实现不稳定。不稳定的选项通常不会直接添加到主 Apache 源代码树中,而是作为单独的可安装模块处理。
话虽如此,要使用 HTTP/2,您至少需要升级到 2.4.17,但实际上应该升级到最新版本(撰写本文时为 2.4.26),因为这个模块变化很大,自发布以来出现了许多错误,性能得到了改进,甚至解决了许多 CVE(包括:2016-1546,2016-8740和2017-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 可能会有好处。