如何对 CloudFront 中的 504 错误进行故障排除?

2 分钟阅读
0

我正在使用 Amazon CloudFront 分发来提供内容。但是,当查看器尝试通过 Web 浏览器访问内容时,它们会收到 504 错误。如何解决这些错误?

简短描述

CloudFront 返回两种类型的 504 错误:

  • 源返回错误,然后通过 CloudFront 传递给查看器时,会出现 504: "Gateway Time-out"(504:“网关超时”)错误。
  • 如果源没有在分配的时间范围内响应 CloudFront,因此请求已过期,则会出现 504: "The request could not be satisfied"(504:“无法满足请求”)错误。

根据您收到的错误,请参阅解决方法的相关部分。

解决方法

504: "Gateway Time-out"(504:“网关超时”)错误

验证您的安全组上是否打开了正确的端口。

确保原始服务器允许来自 CloudFront 的入站流量,通常在端口 443 或 80 上。

如果您的源使用弹性负载均衡器,则请查看 ELB 安全组。确保安全组允许来自 CloudFront 的入站流量。

验证原始服务器防火墙是否允许来自 CloudFront 的连接

根据您的操作系统,确认防火墙是否允许端口 443 和 80 的流量。

如果您使用的是 Redhat Linux View,则请验证您的防火墙规则是否与以下设置匹配。

防火墙规则:

$ sudo firewall-cmd --permanent --zone=public --list-ports

永久添加规则:

$ sudo firewall-cmd --permanent --zone=public --add-port=80/tcp       
$ sudo firewall-cmd --permanent --zone=public --add-port=443/tcp

如果您使用的是 Ubuntu Linux,请验证您的防火墙规则是否与以下设置匹配。

Ubuntu Linux 查看防火墙规则:

$ sudo ufw status verbose

永久添加规则:

$ sudo ufw allow 80
$ sudo ufw allow 443

如果您在 Windows 服务器上使用 Windows 防火墙,则请参阅 Microsoft 文档中的添加或编辑防火墙规则

请确保您的自定义服务器可以通过 Internet 访问

如果 CloudFront 无法通过 Internet 访问您的来源,则 CloudFront 会返回 504 错误。要检查互联网流量是否可以连接到您的源,请确认您的 HTTP 和 HTTPS 规则是否与以下设置匹配。

对于 HTTPS 流量:

nc -zv OriginDomainName/IP_Address 443
telnet OriginDomainName/IP_Address 443

对于 HTTP 流量:

nc -zv OriginDomainName 80
telnet OriginDomainName 80

504: "The request could not be satisfied"(504:“无法满足请求”)错误

测量 Web 应用程序的典型和高负载延迟

使用以下命令测量 Web 应用程序的响应能力:

curl -w "DNS Lookup Time: %{time_namelookup} \nConnect time: %{time_connect} \nTLS Setup: %{time_appconnect} \nRedirect Time: %{time_redirect} \nTime to first byte: %{time_starttransfer} \nTotal time: %{time_total} \n" -o /dev/null https://www.example.com/yourobject

注意:对于 https://www.example.com/yourobject,请输入您正在测试的 Web 应用程序的 URL。

输出与以下内容类似:

DNS Lookup Time: 0.212319   
Connect time: 0.371254   
TLS Setup: 0.544175  
Redirect Time: 0.000000   
Time to first byte: 0.703863   
Total time: 0.703994

根据请求的位置,对显示高延迟的步骤进行故障排除。

添加资源或调整服务器和数据库

请确保您的服务器有足够的 CPU、内存和磁盘空间来处理查看器请求。

在后端服务器上设置持久连接。当必须为后续请求重新建立连接时,这些连接有助于延迟。

调整 CloudFront 超时值

如果之前的故障排除步骤未能解决 HTTP 504 错误,则请更新分发中为源响应超时指定的时间


相关信息

HTTP 504 状态码(网关超时)

AWS 官方
AWS 官方已更新 2 年前