我一直在寻找使用HTTP2专门使用服务器推送来改善页面加载的方法。
我们有一个HAProxy =>清漆=> Apache配置。
我知道varnish 5可以处理HTTP2请求,但是当请求具有服务器推送头以获取页面上的其他资源时,这些资源会从缓存中出来还是只是传递给apache?
我的想法是,如果那些服务器推送头没有被清漆处理,那将是阻止页面加载而不是净增益......
答案 0 :(得分:4)
HAProxy 1.8只在前端支持HTTP / 2,然后使用HTTP / 1.1连接到Varnish - 除非您将其用作TCP负载均衡器而不是HTTP负载均衡器? HAproxy 1.9确实在后端添加了HTTP / 2(即在您的设置中添加到Varnish等下游系统)。当我将它用作HTTP代理时,我不相信它们支持HTTP / 2推送。
Varnish同样只支持前端的HTTP / 2而不是推送AFAIK。
所以基本上你不能在当前的基础设施中使用Push。它们将连接到Apache(这是唯一具有Push支持的部分)作为HTTP / 1.1连接,因此除非使用HTTP / 2,否则它甚至不会尝试推送资源。
支持此功能的最简单方法是简化基础架构。我不确定你是否有需要HAProxy和Varnish的音量,或者你是否有其他理由以这种方式设置它?如果没有,那么你可以完全摆脱它们而只是使用Apache。或者只使用HAProxy作为TCP代理,并使用HTTP / 2连接到任何Apache实例(通过TLS或不通过TLS)。
另一个选择是将另一个Apache实例放在HAProxy之前来处理HTTP / 2和HTTP / 2 Push。后端连接可以通过HTTP / 1然后向这个新Apache发送信号以使用链接头(甚至通过HTTP / 1)推送资源,并且它将从下游适当地请求资源(如果可以从Varnish缓存读取它,如果它是这样建立的)。但运行Apache - > HAProxy - >清漆 - >对于大多数网站而言,Apache肯定听起来有点过分了。
答案 1 :(得分:0)
HAproxy 1.9中现在支持HTTP / 2 Push并带有“ option http-use-htx”选项 可以将Varnish(和其他非TLS)用作参数为“ proto h2”的HTTP / 2后端服务器。
它还可以使用参数为“ ssl verify none alpn h2”的启用了TLS HTTP / 2的后端服务器
但是我正在使用Varnish 6.0允许HTTP / 2推回到另一个启用了“ proto h2”的HAproxy前端,因为Varnish似乎仅支持HTTP / 1.1到其后端服务器。 即使varnishlog显示在来自HAProxy的请求中使用了HTTP / 2协议。
我已经测试了以下内容,并且一直使用HTTP / 2(end-2-end)。
HTTP / 2浏览器-> Public-HAProxy-h2frontend-> Back-HAProxy-h2frontend-> HTTP / 2-SSL-Webserver(IIS)
在Varnish之后,以下操作失败,因为它仅对Back-HAProxy-h2frontend使用http / 1.1,因此需要能够强制varnish继续对后端服务器使用HTTP / 2。
HTTP / 2浏览器-> Public-HAProxy-h2frontend-> HTTP / 2-Varnish-> Back-HAProxy-h2frontend-> HTTP / 2-SSL-Webserver(IIS) >