【问题标题】:What could prevent me to activate http2 with apache?什么可以阻止我用 apache 激活 http2?
【发布时间】:2018-04-19 16:02:00
【问题描述】:

我已经阅读了很多关于 http2 的文档,并且启用它似乎是安全的。但我需要 100% 确定我不会有任何回归,或者至少要知道会发生什么回归。

什么会阻止我在我的生产 apache 服务器上启用 http2? 我必须仔细检查什么配置? 什么新行为可能会给我带来麻烦?

【问题讨论】:

    标签: apache ssl https http2


    【解决方案1】:

    这是一个非常基于意见的问题,对于旨在提供基于事实的答案的 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 是否(以及在多大程度上)会有所帮助。对于性能不佳的网站,这不是一个神奇的解决方案。

    升级后需要考虑的其他几点:

    • 您是否针对 HTTP/2 进行了优化?如果是,何时进行?这会影响那些仍在使用 HTTP/1.1 的访问者吗?有关详细信息,请参阅 this answer
    • 您是否对任何后端服务器使用 HTTP/2 或在 Web 服务器上终止 HTTP/2(就像许多对 HTTPS 所做的那样)并向任何后端应用程序服务器使用 HTTP/1.1?这需要使用mod_proxy_http2,它仍然被标记为实验性的,并且与主要的 mod_http2 模块相比,它的使用和过度使用更少。我现在建议不要这样做,除非你有充分的理由使用它。无论如何,如果不进行与上述类似的升级,许多后端应用程序服务器也将不支持 HTTP/2。
    • 您是否使用 HTTP/2 推送等新功能?这仍然是一项新兴技术和needs careful thought,最好留到缓存摘要标准化之前。

    归根结底,没有人,但您可以“100% 确定”您不会遇到问题,这取决于您自己进行测试以增强自己的信心。显然,您对 HTTP/2 的了解和了解越多,您就越能准备好了解其影响和任何问题。

    【讨论】:

      猜你喜欢
      • 2015-02-14
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      相关资源
      最近更新 更多