首页 > 解决方案 > 如何设置谷歌云负载均衡器以利用清漆中的 http2 支持?

问题描述

在 Google Cloud 上,我将 VM 设置为 varnish 6(社区)来管理 http 和 http2(没有 SSL/TLS)。

我还在端口 443 上设置了挂接并使用公共 IP 工作正常。

目标(编辑)

现在我想把这个虚拟机放在负载均衡器后面,正如@Frank 所指出的那样,我的目标是用google-cloud-load-balancer服务替换hitch 。

我的配置

我使用虚拟机在配置中打开三个端口创建了一个非托管实例组: 在此处输入图像描述

我的“端点协议”设置为 HTTP/2 的负载均衡器配置是: 在此处输入图像描述

但是这个设置给了我一个 502 错误代码:

HTTP/2 502                                                                                                                           
content-type: text/html; charset=UTF-8                                                                                               
referrer-policy: no-referrer                                                                                                         
content-length: 332                                                                                                                  
date: Fri, 13 Nov 2020 14:38:02 GMT                                                                                                  
alt-svc: clear                                                                                                                       

端点设置为 HTTP

如果我将 Endpoing 协议更改为 HTTP: 在此处输入图像描述

它可以工作,但请求协议是 HTTP/1.1,如下所示varnishlog

*   << Request  >> 44493     
-   ReqMethod      GET
-   ReqURL         /?test=1
-   ReqProtocol    HTTP/1.1

标签: google-cloud-platformgoogle-compute-enginevarnishhttp2google-cloud-load-balancer

解决方案


如果您想按照文档在后端使用 HTTP/2,则需要使用 TLS(自签名证书很好) :

除了这种网络级加密之外,您还可以使用安全协议作为后端服务协议。安全协议包括 SSL、HTTPS 或 HTTP/2(使用 TLS)。

目前,您的后端正在通过纯 HTTP 向负载均衡器提供流量,因此当您将协议更改为 HTTP/2 时,负载均衡器会收到 HTTPS 响应。

如果您还从后端同时提供这两种协议,那么您必须将负载均衡器“命名端口”更改为提供流量的位置(常用端口为 443/tcp)。

编辑用我自己的评论补充这个答案:它可能适用于少数后端,但每个后端都需要能够维护自己的非自签名 SSL 证书,或者您需要实施第 3 方机制来刷新它在所有这些上,另外 TCP 负载均衡器与 Cloud CDN 或到不同类型后端的多个 url 路径不兼容。最后,它总结了您想要处理多少管理,以及您愿意放弃哪些 GCP 功能。


推荐阅读