将 cloudflare 后面的 Nginx 升级到 http2。要不要升级?

将 cloudflare 后面的 Nginx 升级到 http2。要不要升级?

我在 CloudFlare 机器后面运行 nginx 版本:1.12.1。CloudFlare 前端启用了 http2。

在此处输入图片描述

我想知道升级到支持 http2 的 Nginx 1.9.5?. 升级的成本很高。我的 Linode centos 是

centos-发布-7-3.1611.el7.centos.x86_64

并且通过 rpm 存储库提供的默认 Nginx 包仍然是 Nginx 1.12。

升级 CloudFlare 机器后面的 Nginx 版本是否会带来显著的优势?

编辑:你可能觉得我太天真了,但我认为 1.12 比 1.9 低。我真傻。回到第二个问题,这有影响吗?

答案1

云Flare不使用 HTTP/2 访问原始服务器,仅限 HTTP/1.1。我可以通过查看我的服务器日志来确认这一点。

因此,如果您的服务器仅由 CloudFlare 访问,则启用 HTTP/2 是没有意义的。

更新

进一步说,CloudFlare 在其 CDN 和客户端浏览器之间使用 HTTP/2。这为浏览器带来了性能提升。后端与源的连接不太重要,因为大多数网站上的大多数资源都被缓存了。

如果他们使用 HTTP/2,也许可以稍微加快速度,但他们是一家好公司,如果这是一件有用的事情,他们最终会这样做。

答案2

正如其他人提到的,Cloudflare 目前不与原始服务器使用 HTTP/2,因此在原始服务器中实现 HTTP/2 没有什么优势。

HTTP/2 的主要优势在于低延迟连接,例如浏览器到服务器,Cloudflare 已经通过 HTTP/2 提供资源。服务器到服务器连接的优势较小。

此外,Cloudflare 使用 Nginx 版本,它目前不支持服务器端的 HTTP/2,Nginx 已声明他们无意添加它

近期是否计划提供 HTTP/2 代理支持?

简短回答:

不,没有计划。

长答案:

几乎没有任何意义去实现它,因为 HTTP/2 的主要优点是它允许在单个连接中多路复用多个请求,从而 [几乎] 消除了同时请求数量的限制 - 并且在与您自己的后端通信时没有这样的限制。此外,当使用 HTTP/2 连接后端时,情况甚至可能变得更糟,因为使用的是单个 TCP 连接而不是多个连接。

另一方面,在上游模块中实现 HTTP/2 协议和单个连接内的请求多路复用将需要对上游模块进行重大更改。

由于上述原因,至少在可预见的未来,上游模块中没有计划实现 HTTP/2 支持。如果您仍然认为需要通过 HTTP/2 与后端​​通信 - 请随时提供补丁。

你可能同意或不同意上述观点,但当它被写下来时(2015 年),这似乎是相当确定的,而且自那以后再也没有更新过,尽管已重新开放此票务请求4 个月前开始并一直处于开放状态。

这并不是说 Cloudflare 不会自行采取这一行动(就像 Nginx 支持之前对 Server Push 所做的那样),但我认为这种可能性较小,因为它们所基于的核心平台不支持这一点。

最后,您声明您使用的是 Centos 7.3。它有一个旧版本的 OpenSSL(1.0.1),不支持 ALPN,而 ALPN 是 Chromium 浏览器(Chrome 和 Opera)支持 HTTP/2 所必需的,未来可能会有更多这样的 HTTP/2 客户端,因此 Cloudflare 的未来实施可能需要此功能。最近发布的 Centos 7.4 确实包含 OpenSSL 1.0.2,它在理论上支持 ALPN,但撰写本文时 Nginx 的打包版本仍使用旧版本进行编译,因此这暂时没有帮助。请参阅此博客文章了解更多详细信息。因此,这不仅仅是升级 Nginx 的问题,还涉及操作系统和/或 OpenSSL,而且即使这样,目前也无济于事。当然,也有办法解决这个问题(从源代码安装,改为在 Docker 映像中运行……等等),但如果你认为仅升级 Nginx 的成本就很高,那么我想这些额外的事情真的会给这个棺材钉上一颗钉子。

总而言之,我想说现在就放手吧,享受 Cloudflare 提供并照顾的 HTTP/2 支持。事实上,考虑到上述所有问题,获得 HTTP/2 的最简单方法之一就是使用 Cloudflare 这样的服务,而不必费心在自己的基础设施上实现它。

答案3

centos-release-7.3.1611.el7.centos.x86_64是你安装的CentOS的版本,而不是nginx的版本。

您当前安装的 nginx 1.12.1 比 1.9.5 版本更新很多(因为 12 大于 9)。只要您使用的二进制文件是在启用 http2 的情况下构建的,您就应该能够使用该功能而无需更改 nginx 版本。

答案4

你说你已经安装了 Nginx 1.12.1,并且(正确地)Nginx 自 1.9.5 版本以来就支持 HTTP/2。

由于您已经有了较新的版本,我不太明白您为什么说需要升级。(您目前似乎拥有最新的稳定版本。)

看起来你应该已经设置好了版本,可能只需要更改配置(添加http2到相关的 ssllisten指令)。

相关内容