为什么将 100k JSON 文件发布/上传到 AWS CloudFront 端点会导致 504 错误?

为什么将 100k JSON 文件发布/上传到 AWS CloudFront 端点会导致 504 错误?

在 wordpress 网站上,我们会将请求发送到 CloudFront,然后 CloudFront 将请求发送到原点(如有必要),原点会经过 ELB,然后发送到为该请求提供服务的两个或三个实例。

大多数请求都可以正常工作,但是当我们将 JSON 文件上传到时admin-ajax.php,会导致从 CloudFront 日志中捕获的 504 错误:

2022-01-31  21:32:24    MIA3-C2 1462    67.190.247.197  POST    d2q8ixmwt0jy43.cloudfront.net   /wp-admin/admin-ajax.php    504 https://xxxxxxx.com/wp-admin/edit.php?post_type=elementor_library&tabs_group=library    Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/97.0.4692.99%20Safari/537.36%20Edg/97.0.1072.76 -   -   Error   Ae0gLzThCiZR2N5D8gLO6s-o8IwwlmYrxWvUbUgr1A64_nMpzN0qRg==    evolvetelemed.com   https   167737  30.107  -   TLSv1.3 TLS_AES_128_GCM_SHA256  Error   HTTP/2.0    -   -   64798   30.107  OriginCommError text/html   1033    -   -

错误似乎是OriginCommError,但我不明白为什么会出现这个错误。跟踪实例上的 Web 服务器上的日志显示请求甚至没有到达那里。

我不太清楚为什么有些请求可以工作,而有些则不行。进一步的结论是,当媒体库中的二进制文件上传到时async-upload.php,它可以工作。

我们nginx在前端使用它作为php-fpm处理 php 的 web 服务器。

答案1

这不是一个完整的答案,但它太长了,不适合评论,它可能会给你一些想法。一旦我们得到真正的答案,我就会删除它。

一些想法:

  • 字段“30.107”表示“处理请求所需的时间”,根据这一页。30s是标准的http超时长度,这个很有意思。
  • 504 状态响应表示“网关超时”。更详细的说法是“服务器在充当网关或代理时,未及时收到完成请求所需的上游服务器的响应。”
  • CloudFront 错误日志中未定义 OriginCommError。但是“ClientCommError – 由于服务器和查看器之间的通信问题,对查看器的响应被中断。”表明与服务器的连接中断,而不是未建立连接。
  • 字段“sc-content-len”定义为“响应的 HTTP Content-Length 标头的值”。值为“1033”。这表明某种回复正在返回到负载均衡器。

所有这些都表明 CloudFront 已将请求发送到 ALB,但某些时候出现超时。我建议您查找 ALB 日志,看看它们是否能说明问题。我想看看它尝试将请求发送到哪个服务器,并仔细检查请求是否到达。

相关内容