我有以下基础设施:
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=+http2
443 -> 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
尽管在这种情况下清漆可以解决问题。
简而言之,不,你不能这么做。