我们在一个 API 网关后面有许多服务,它本身在 ingress-nginx 后面。我们正在尝试使用 HTTP/2 来加速到前端的数据传输,但我们所有的连接仍然是通过 HTTP/1.1 完成的。
从客户端到 nginx 的连接是通过 HTTPS,但 nginx 使用 HTTP 与我们的 API 网关通信,网关也使用 HTTP 与后端服务通信。
我们是否需要从端到端使用 HTTPS 才能使 HTTP/2 正常工作?如果是这样,最好的设置方法是什么:使用证书?如果不是,是什么导致连接断开到 HTTP/1.1?
我们使用的是 ingress-nginx 版本 0.21.0,它有 nginx 1.15.6 和 OpenSSL 1.1.1,应该足以支持 TLS 1.3/ALPN/HTTP2。我们的 nginx 配置 configmap 将 use-http2
设置为 true
我可以看到 pod 的 /etc/nginx.conf
有一个 listen ... http2;
行。
编辑 10/05/2019:
根据@Barry Pollard 和@Rico 的评论,我发现位于我们的 ingress-nginx Controller 前面的 AWS Elastic Load Balancer 不支持 HTTP/2。我已经将 nginx 从堆栈中删除,我们的 API 网关正在配置自己的网络负载均衡器。然而,我们仍然使用 HTTP/1.1。看起来 ASP.Net Core 2.2 的 HTTP 服务器 Kestrel 默认使用 HTTP/2,所以我不确定为什么连接仍然下降到 1.1。
最佳答案
就像@BarryPollard 所说的那样,您不应该需要端到端的 HTTP/2 来在浏览器上建立 HTTP/2 连接。
听起来您正在为客户端使用的任何内容都已降为 HTTP/1.1,请确保您尝试使用以下其中一项:
- Chrome 51
- 火狐 53
- 第 12 条
- Internet Explorer 11
- 歌剧 38
您没有指定您的 nginx 前面的架构。它是否直接连接到互联网?或者它正在通过云负载平衡器?加速网络?您还可以按照描述使用 Wireshark 进行测试 here .
关于amazon-web-services - 如何使用 ingress-nginx 让 HTTP/2 在 Kubernetes 集群中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56060094/