Varnish 5.0 是否支持 HTTP/2 后端连接?

Varnish 5.0 是否支持 HTTP/2 后端连接?

我有以下基础设施:

80  ->  Varnish -> Backend (NGINX, port 8080)
443 ->  NGINX (SSL-Termination with HTTP/2 enabled) -> Varnish -> Backend (NGINX, port 8080)

我知道可以HTTP/2使用 Varnish 的参数(端口 80)来启用前端连接协议-p feature=+http2,但后端连接呢?varnishlog -b向我展示了所有后端通信都是使用HTTP/1.0和执行的HTTP/1.1

如果有人能告诉我有关 Varnish 和 NGINX 的常见做法是什么,我会非常高兴:

  • 是否可以启用HTTP/2后端连接?
  • 从性能角度来看,这样做有意义吗?
  • -p feature=+http2从性能角度来看,保持通信参数处于启用状态是否有意义443 -> NGINX (SSL-Termination with HTTP/2 enabled) -> Varnish

关于后端通信(未加密):我知道它HTTP/2与 TLS 加密有关,但也许有一些我没听说过的调整,所以我认为最好询问一下,以确保 100% 确定。感谢您的理解。

答案1

@Michael Hampton 的回答缺少一些要点,因此这里是:

Hitch+Varnish 组合中唯一一款支持 HTTP/2 的软件,但大多数浏览器都需要 TLS 连接才能使 HTTP/2 正常工作。也就是说,TLS 连接是 HTTP/2 所必需的,这是目前 HTTP/2 的基本要求。

Varnish Plus 确实支持 TLS,但 Varnish 开源不支持。

至于答案:

  • 不,无法为后端连接启用 HTTP/2
  • 确实如此不是就性能而言,这样做没有任何意义。HTTP/2 的主要好处是请求多路复用。除非 Varnish 能够解析 HTML,然后通过 HTTP/2 从后端并行请求所有资产,否则不需要/不可能。没有人想把 Varnish 做成浏览器 :) 因为这样就很好了
  • 不,确实如此不是出于性能方面的考虑,保持-p feature=+http2443 -> NGINX(启用 HTTP/2 的 SSL-Termination)的参数处于启用状态是有意义的。因为 NGINX 根本不会将 HTTP/2 与其后端(Varnish)通信,就像 Varnish 不会将 HTTP/2 与其后端(例如 NGINX+PHP-FPM)通信一样,因为这没有意义(参见前面的观点)。

这就是说:

  • -p feature=+http2保留Hitch + Varnish 组合确实很有意义。
  • -p feature=+http2保留NGINX (stream) + Varnish 组合也是有意义的如果NGINX 的流模块支持 ALPN 协议协商。但目前不支持。因此它无法正确终止 TLS,从而使 HTTP/2 正常运行。

答案2

Varnish 根本不支持 https。它从来都不支持,也永远不会支持。

Varnish 在 5.0 中提供的所谓 http2 前端支持实际上根本不存在于 Varnish 中。相反,它使用另一个名为 hitch 的软件,这是一个代理服务器,它实际上使用 HTTP/2 终止 TLS,并将纯 HTTP 连接传递到其后端,即 Varnish 前端。

所有 Varnish 后端都仅支持 HTTP。

因此,当使用 HTTP/2 时,它实际上看起来像这样:

故障 - Varnish - Nginx

尽管在这种情况下清漆可以解决问题。


简而言之,不,你不能这么做。

相关内容