0

在 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

4

2 回答 2

2

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

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

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

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

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

于 2020-11-13T16:52:58.983 回答
0

我发现谷歌负载均衡器有一些HTTP2-limitations,我引用:

  • 负载均衡器和后端之间的 HTTP/2 不支持在 HTTP/2 连接的单个流上运行 WebSocket 协议 (RFC 8441)。
  • 负载均衡器和后端之间的 HTTP/2 不支持服务器推送。

所以我认为(目前)即使我可以创建一个纯 http/2 链,我也无法利用 http/2 协议的优势。

@Frank您给出最接近解决方案的答案,我投票赞成。

于 2020-11-17T10:24:53.663 回答