varnish - Varnish 如何处理 HTTP/2 服务器推送?

标签 varnish http2

我一直在寻找使用 HTTP2 改进页面加载的方法,特别是使用服务器推送。

我们有一个 HAProxy => Varnish => Apache 配置。

我知道 varnish 5 可以处理 HTTP2 请求,但是当请求具有服务器推送 header 以获取页面上的更多资源时,这些资源是从缓存中出来还是只是传递给 apache?

我的想法是,如果这些服务器推送 header 不由 Varnish 处理,则会阻碍页面加载而不是净 yield ......

最佳答案

HAProxy 1.8 仅在前端支持 HTTP/2,然后将使用 HTTP/1.1 连接到 Varnish - 除非您将其用作 TCP 负载均衡器而不是 HTTP 负载均衡器? HAproxy 1.9 确实在后端添加了 HTTP/2(即设置中的下游系统,例如 Varnish)。我不认为将其用作 HTTP 代理时支持 HTTP/2 Push。

同样,Varnish 仅在前端支持 HTTP/2,并且不支持推送 AFAIK。

所以基本上你不能在当前的基础设施中使用 Push。它们将作为 HTTP/1.1 连接连接到 Apache(这是唯一支持 Push 的部分),因此除非使用 HTTP/2,否则它甚至不会尝试推送资源。

支持这一点的最简单方法是简化您的基础设施。我不确定您是否有需要 HAProxy 和 Varnish 的卷,或者您是否有其他原因以这种方式进行设置?如果没有,那么您可以完全摆脱它们并只使用 Apache。或者,只需使用 HAProxy 作为 TCP 代理并使用 HTTP/2 连接到任何 Apache 实例(无论是否通过 TLS)。

另一个选择是在 HAProxy 前面放置另一个 Apache 实例来处理 HTTP/2 和 HTTP/2 Push。后端连接可以通过 HTTP/1 然后向这个新的 Apache 发出信号,使用链接 header (甚至通过 HTTP/1)推送资源,并且它将适本地从下游请求资源(如果就是这样设置的)。但对于大多数站点来说,运行 Apache -> HAProxy -> Varnish -> Apache 听起来绝对是大材小用。

关于varnish - Varnish 如何处理 HTTP/2 服务器推送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48817511/

相关文章:

google-chrome - 如何使用 chrome 从 gRPC 服务器获取日期

尽管将 TTL 设置为 0,但 Varnish 仍会在一段时间后重置

java - Okhttp3 与 conscrypt 在 jdk 8 中支持 http 2

c++ - 通过 TLS 将 HTTP2 帧发送到服务器

ios - 如何在 iOS 中验证 HTTP/2 连接池/重用?

http2 - HTTP/2 中的多路复用是什么意思

java - 限制 Varnish 客户端等待时间,而不是后端时间

varnish - 调试 VCL 文件的最佳方法是什么?

java - 如何从 Java 执行 HTTP 清除?

Varnish ,用于阻止拒绝服务攻击