google-cloud-platform - 如何设置谷歌云负载均衡器以利用清漆中的 http2 支持?
问题描述
在 Google Cloud 上,我将 VM 设置为 varnish 6(社区)来管理 http 和 http2(没有 SSL/TLS)。
我还在端口 443 上设置了挂接并使用公共 IP 工作正常。
目标(编辑)
现在我想把这个虚拟机放在负载均衡器后面,正如@Frank 所指出的那样,我的目标是用google-cloud-load-balancer服务替换hitch 。
我的配置
但是这个设置给了我一个 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
它可以工作,但请求协议是 HTTP/1.1,如下所示varnishlog
:
* << Request >> 44493
- ReqMethod GET
- ReqURL /?test=1
- ReqProtocol HTTP/1.1
解决方案
如果您想按照文档在后端使用 HTTP/2,则需要使用 TLS(自签名证书很好) :
除了这种网络级加密之外,您还可以使用安全协议作为后端服务协议。安全协议包括 SSL、HTTPS 或 HTTP/2(使用 TLS)。
目前,您的后端正在通过纯 HTTP 向负载均衡器提供流量,因此当您将协议更改为 HTTP/2 时,负载均衡器会收到 HTTPS 响应。
如果您还从后端同时提供这两种协议,那么您必须将负载均衡器“命名端口”更改为提供流量的位置(常用端口为 443/tcp)。
编辑用我自己的评论补充这个答案:它可能适用于少数后端,但每个后端都需要能够维护自己的非自签名 SSL 证书,或者您需要实施第 3 方机制来刷新它在所有这些上,另外 TCP 负载均衡器与 Cloud CDN 或到不同类型后端的多个 url 路径不兼容。最后,它总结了您想要处理多少管理,以及您愿意放弃哪些 GCP 功能。
推荐阅读
- python - 确定一个地址和地址列表之间的最近路径
- c# - 为什么用一个类分配一个变量,它构造一个线程比中止线程工作得更快?
- javascript - 如何跨多个页面从firebase获取uniqueID
- mysql - 在没有存储记录的 LEFT JOIN 表上使用 GROUP BY 和 HAVING
- python - 不能在另一个文件中使用返回的变量 - Python
- r - 为什么 R 函数 as.character 应用于列表时会自动生成换行符(\n)?
- python - 熊猫:比较组内的所有行并检查条件是否满足
- node.js - AssertionError:预期存根已使用参数 201 调用
- c# - 使用 c# 在每个印地语单词之前和之后设置括号
- python - 使用 Python 操作 MySQL 数据库时出现 1064 错误