如何在终止 SSL 的 AWS 网络负载均衡器后面使用 HTTP2

How to use HTTP2 behind AWS Network Load Balancer terminating SSL

我有以下设置:

client --> AWS NLB (terminates SSL) --> nginx --> webserver

如何让 nginx 通过 HTTP2 提供内容?在 nginx 服务器配置上启用它只会导致浏览器在访问页面时下载文件。

浏览器使用 ALPN 作为 TLS 协商的一部分来决定起诉 HTTP/2 协议。

由于您的 TLS 终止发生在 NLB,它必须宣布此 HTTP/2 支持并将未加密的 HTTP/2 数据传递给 Nginx。

我看不到任何迹象表明 NLB 支持设置 ALPN,所以不确定这是否可能。您将需要询问 AWS 是否支持它,因为他们的文档中没有任何内容,但这本身可能会给您不想要的答案。

不确定为什么要下载文件。如果你直接连接到 Nginx 会发生同样的事情吗?

我最终得出的解决方案是这样的:

client --> AWS NLB --> AWS ALB (terminates SSL) --> nginx --> webserver

诀窍是在创建时在 NLB 的端口 443 上使用 TCP!网络 ui 不允许您之后在 443 上添加 TCP 侦听器 — 它要求您在 443 和 [=22 上使用 TLS 选项ui =] TLS 终止证书。我使用 NLB 的唯一原因是它支持静态 IP 关联。到 ALB 的 TCP 直通适用于我的用例。

由于 ALB 终止了 TLS 并且还支持 HTTP/2 此设置有效。