【发布时间】:2018-04-19 16:02:00
【问题描述】:
我已经阅读了很多关于 http2 的文档,并且启用它似乎是安全的。但我需要 100% 确定我不会有任何回归,或者至少要知道会发生什么回归。
什么会阻止我在我的生产 apache 服务器上启用 http2? 我必须仔细检查什么配置? 什么新行为可能会给我带来麻烦?
【问题讨论】:
我已经阅读了很多关于 http2 的文档,并且启用它似乎是安全的。但我需要 100% 确定我不会有任何回归,或者至少要知道会发生什么回归。
什么会阻止我在我的生产 apache 服务器上启用 http2? 我必须仔细检查什么配置? 什么新行为可能会给我带来麻烦?
【问题讨论】:
这是一个非常基于意见的问题,对于旨在提供基于事实的答案的 Stack Overflow 来说,这并不是一个很好的格式。这也完全取决于您的环境,您提供的细节很少。
不过我对此很感兴趣,不介意花一点时间尽可能回答。
这些是你应该考虑的事情:
首先,您需要将 Apache 升级到支持 HTTP/2 的版本。理想情况下,您应该升级到最新版本(撰写本文时为 2.4.29),因为 HTTP/2 代码自 2.4.17 首次启动以来已经发生了许多变化,并且在 2.4.17 中不再被标记为“实验性” 2.4.26。这有多容易取决于您的环境,但打包版本(例如通过 RHEL 和 Centos 上的yum)通常不是最新版本,并且超出打包环境的安全性,从源代码构建或第三方 repo 不是轻而易举的一步。另请参阅this question,了解有关是否应该使用 mod_http2 的更多信息(我认为是)。
您需要考虑您来自哪个 Apache 版本以及升级时需要进行哪些更改(如果有)。许多人仍在使用 2.2 和upgrade to 2.4 requires some changes。如果已经在 2.4 的早期版本上,那么这应该不是问题,但仍有一些更改可能会影响您。 2.2 是生命的终结,所以这是你迟早需要做的事情。
HTTP/2 需要 HTTPS 才能在所有浏览器上工作,因此如果您的站点尚未在此上运行,那么这可能是一个升级。然而,网络正在转向 HTTPS,因此,如果还没有,那么您迟早需要这样做。
HTTP/2 需要 OpenSSL 1.0.2 或更高版本才能支持 ALPN 来协商 HTTP/2。同样,许多 Linux 发行版不包含此功能,甚至那些具有此功能的发行版(例如 RHEL/Centos 7.4)也不会针对此版本构建 Apache。因此,您可能需要再次考虑从源代码或替代 repo 构建(请参阅上面关于此的要点)。
HTTP/2 需要良好的 HTTPS 配置(例如 GCM 密码),这要归功于 OpenSSL 1.0.2,但可能需要查看您的 SSL/TLS 配置来配置这些配置。 SSLLabs Server Test Tool 是您查看此内容的最佳选择。
您使用网络套接字吗? They are currently not compatible with HTTP/2 所以如果使用它们,你需要保持在 HTTP/1.1 上。目前有计划将 WebSockets 添加到 HTTP/2,但仍处于讨论阶段。
您应该知道 HTTP/2 强制使用小写的 HTTP 标头名称。传统上,HTTP 标头名称始终不区分大小写,但并非每个实现都正确实现了这一点,有些依赖于区分大小写。
HTTP/2 响应仍会发送响应代码(200、404),但会省略状态文本(“OK”、“Not Found”)。同样,这不应该影响大多数正确编码的应用程序,但如果您依赖此响应消息,那么您可能需要做一些工作来解决这个问题。
HTTP/2 旨在使用单个连接。如果您当前对不同域的资产进行分片,那么它可能会尝试 coalesce them back into one connection,这应该可以无缝运行,但如果 HTTP/2 无法在所有分片域上使用,则可能会导致一些问题。
最后 3 分来自优秀的BBC write up of the issues they experienced when moving to HTTP/2。
以上是关于如何升级以允许您启用 HTTP/2 的所有要点。老实说,在大多数标准 Linux 发行版上现在有点痛苦,但希望随着新版本变得越来越普遍,会变得更容易。
但是,一旦您准备好了,并且可以升级到 HTTP/2,那么您需要决定是否要升级。
总的来说,HTTP/2 被设计为向后兼容,因此应该是无缝升级。那些可以与 HTTP/2 通信的客户端,那些不能与 HTTP/1.1 通信的客户端(在可预见的未来您应该保留配置)。
但是,HTTP/2 在技术领域仍然相对较新,在客户端或服务器端可能存在实施问题。说它已经推出 2 年了,我对它的体验是非常积极的,没有看到很多问题,但是,与任何升级一样,你应该在升级之前测试、测试、测试,然后监控。我见过的大多数问题都是晦涩难懂的问题,其中 HTTP/2 的性能不如应有的那么好,而不是显示停止问题,例如,大多数没有我这么感兴趣的人很难注意到它们. 20% of web traffic is using HTTP/2 所以它是一种经过验证的技术,它主要基于 SPDY,在过去的几年里,它已被许多站点、服务器和客户端使用,没有出现重大问题。
您还应该考虑 HTTP/2 的好处。在我看来,大多数网站应该会看到很好的速度提升(可能是 20%),但这并不能保证,这取决于各个站点以及访问者的连接和使用情况。某些带宽受限的站点甚至可能会变慢。但是,您需要设定切合实际的期望并了解性能瓶颈在哪里,这将有助于了解 HTTP/2 是否(以及在多大程度上)会有所帮助。对于性能不佳的网站,这不是一个神奇的解决方案。
升级后需要考虑的其他几点:
归根结底,没有人,但您可以“100% 确定”您不会遇到问题,这取决于您自己进行测试以增强自己的信心。显然,您对 HTTP/2 的了解和了解越多,您就越能准备好了解其影响和任何问题。
【讨论】: