我有以下基础设施:
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
and执行的HTTP/1.1
。
如果有人能告诉我关于 Varnish 和 NGINX 的常见做法,我会非常高兴:
- 是否可以启用
HTTP/2
后端连接? - 这样做对性能有任何意义吗?
-p feature=+http2
在性能方面保持为通信启用参数是否有意义443 -> NGINX (SSL-Termination with HTTP/2 enabled) -> Varnish
?
关于后端通信(未加密):我知道这HTTP/2
与 TLS 加密有关,但也许有一些我没有听说过的调整,所以这就是为什么我认为最好问一下以便 100% 确定。感谢您的理解。
@Michael Hampton 的回答缺少一些要点,所以这里是:
Varnish是一款在 Hitch+Varnish 组合中执行 HTTP/2 的软件,但大多数浏览器需要 TLS 连接才能使 HTTP/2 工作。也就是说,HTTP/2 需要 TLS 连接,这是当今的基本要求。
Varnish Plus 确实支持 TLS,而 Varnish 开源不支持。
至于答案:
-p feature=+http2
因为 NGINX 根本不会将 HTTP/2 与其后端(Varnish)通信,类似于 Varnish 不会将 HTTP/2 与其后端(例如 NGINX+PHP-FPM)通信,因为它没有意义(参见前一点)。那说:
-p feature=+http2
保持Hitch + Varnish 组合确实有意义。-p feature=+http2
NGINX(流)+ Varnish 组合也是有意义的。但事实并非如此。因此它不能正确终止 TLS 以使 HTTP/2 正常工作。Varnish 根本不支持 https。它从来没有,也永远不会。
Varnish 在 5.0 中提供的所谓的 http2 前端支持实际上根本不在 Varnish 中。相反,它使用了另一个名为 hitch 的软件,它是一个代理服务器,它实际上使用 HTTP/2 终止 TLS,并将纯 HTTP 连接传递到其后端,即 Varnish 前端。
所有 Varnish 后端都只是 HTTP。
所以,当使用 HTTP/2 时,它实际上是这样的:
Hitch - Varnish - Nginx
尽管在这种情况下,清漆可以解决问题。
简而言之,不,你不能那样做。