AWS 负载均衡器 - HTTP 响应 Headers 未通过

AWS Load Balancer - HTTP Response Headers not passed

我在使用 EB 时遇到问题,希望能得到帮助。

我有一个 HTTP 站点使用 nginx 在端口 80 上路由 nextjs + flask 流量。该站点的本地版本运行良好,香草 Elastic Beanstalk 上传也是如此。设置和使用负载平衡器时会遇到问题。目前我正在使用 'Classic Load Balancer' 并且它连接到 Cloud Front 分布。发生的事情是响应 Headers 没有传回客户端。

header 应该是什么样子:[在 HTTP 上没有负载均衡器]

HTTP/1.1 400 Bad Request
Server: nginx/1.17.10
Date: Mon, 16 Aug 2021 01:10:02 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: state=; Max-Age=0; Path=/
Set-Cookie: _state=; Max-Age=0; Path=/
Set-Cookie: max_age=; Max-Age=0; Path=/
Set-Cookie: _max_age=; Max-Age=0; Path=/
Set-Cookie: code_verifier=; Max-Age=0; Path=/
Set-Cookie: _code_verifier=; Max-Age=0; Path=/
Set-Cookie: nonce=; Max-Age=0; Path=/
Set-Cookie: _nonce=; Max-Age=0; Path=/

它们的实际样子:[在 HTTP/HTTPS 上使用负载均衡器 + cloudfront]

HTTP/1.1 500 Internal Server Error
Transfer-Encoding: chunked
Connection: keep-alive
Server: nginx/1.17.10
Date: Mon, 16 Aug 2021 01:11:27 GMT
X-Cache: Error from cloudfront
Via: 1.1 71d15e4317f9ba4644f6c17f42ef94c9.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: MXP64-C2
X-Amz-Cf-Id: BYxDl-eFkhRPzAsPUxFv8gxOYT1jeDL6yoPjwqzZ2u4qcSS20B4ReQ==

我已经尝试通过 HTTP 访问云前端 url,但 header 仍然没有显示。弹性负载均衡器文档指出 'if you have a trailing semicolon in the Set-Cookie field of an application cookie, the load balancer ignores the cookie'。上面的例子符合这样的条件吗?如果是的话,有什么办法可以解决这个问题吗?

我设法通过替换 Classic Load Balancer with an Application Load Balancer 并使用它将我的 HTTP 请求重定向到 HTTPS 而不是 Cloudfront 来解决这个问题。

这可以通过让单个 HTTPS 侦听器侦听重定向到默认目标的端口 433 来完成。作为该过程的一部分,还需要选择一种安全策略(任何一种都可以)并分配相关的 SSL 证书。

单击上面显示的默认目标(或等效项)。如果不存在目标,请单击 'Create target group' 并在下一页中注册一个原点。 (在我的例子中,我选择了我的 Elastic Beanstalk 应用程序)。

通过 Application Load Balancer 服务的应用程序可以通过访问它的 DNS 进行测试。