Cloudfront 在连接到 ELB/Elastic Beanstalk 时抛出 504
Posted
技术标签:
【中文标题】Cloudfront 在连接到 ELB/Elastic Beanstalk 时抛出 504【英文标题】:Cloudfront throws 504 while connecting to ELB/Elastic Beanstalk 【发布时间】:2020-10-30 19:14:04 【问题描述】:所以我在 Elastic Beanstalk 上托管了一个 NextJS 应用程序(它在 docker 文件中的端口 3000 上公开)。现在,我在 Godaddy 注册了我的域名。我最初在 Godaddy 中设置了指向 Elastic Beanstalk 的 DNS。但后来我想使用 Cloudfront 进行 CDN/缓存。
所以,我开始配置 Cloudfront(使用 this article)。我创建了自定义 SSL 证书并通过 DNS 对其进行了验证。我将云端的原点设置为指向 ELB。
现在,一旦部署了云端分发版,我尝试使用云端 URL xxxxx.cloudfront.net
,但出现 "504 ERROR - The request could not be satisfied"
错误。
如果我转到 ELB URL,我就可以访问我的应用程序。所以,我不确定这里有什么问题。如果云端指向 ELB 并且 ELB 有效,那么为什么云端 URL 不起作用。
有什么建议/建议吗?
【问题讨论】:
您是如何设置您的 CF 发行版以与 EB 通信的?也许它尝试使用https但EB只支持http,还是相反? 【参考方案1】:如果您收到 504 错误,则表示您在连接到源站时会超时。
您应该检查以下内容:
ELB 的安全组是否允许来自任何人的入站流量(在端口 80/443 上)?如果没有,CloudFront 会被阻止。 您是否错误地配置了“源协议策略”,通过选择“匹配查看器”,它会预期命中 CloudFront 的 HTTPS 请求会尝试通过 HTTPS 连接到源。 您的应用程序的启动时间是否超过了Origin Response Timeout
的值?默认情况下为 30 秒。
确保来源是正确的域名。
在 AWS 上的 HTTP 504 Status Code (Gateway Timeout) 页面中的 CloudFront 中调试 504 有额外的步骤。
【讨论】:
“源协议策略”设置为“匹配查看器”。我已将其更改为 HTTP。现在它工作正常。感谢您的帮助:)。 @Blueboye 确保您了解进行该更改的含义。当源协议策略为 HTTP 时,为请求提供服务的 CloudFront 边缘站点与您的源服务器之间的流量未加密。只有浏览器和 CloudFront 之间的流量使用 HTTPS。 是的,我明白 CF 和 Origin 之间的流量没有加密。这不是问题,因为它只是我托管的静态站点,站点上没有任何输入字段。但是,我想知道我们是否应该担心,因为起源也在 AWS 中。因此,CF 源通信发生在 AWS 生态系统中。如果在 AWS 内进行通信,我们还需要考虑加密吗?以上是关于Cloudfront 在连接到 ELB/Elastic Beanstalk 时抛出 504的主要内容,如果未能解决你的问题,请参考以下文章
SQLAlchemy 和 PyMySQL 在连接到 AWS RDS 后拒绝连接到“localhost”
mongoose.connect 在连接到 mongodb 后不调用回调