Amazon-Web-Services

為什麼將 100k JSON 文件發布/上傳到 AWS CloudFront 終端節點會導致 504 錯誤?

  • February 1, 2022

在 wordpress 站點上,我們有請求進入 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。

這不是一個完整的答案,但評論太長了,它可能會給你一些想法。一旦我們得到真正的答案,我會刪除它。

一些想法:

  • 根據此頁面,欄位“30.107”是“耗時”(處理請求) 。30s 是一個標準的 http 超時長度,這很有趣。
  • 504 狀態響應意味著“網關超時”。更多細節是“伺服器在充當網關或代理時,沒有收到來自上游伺服器的及時響應,它需要訪問以完成請求。”
  • OriginCommError 未在 CloudFront 錯誤日誌中定義。但是“ClientCommError - 由於伺服器和查看器之間的通信問題,對查看器的響應被中斷。” 表明與伺服器的連接已中斷,而不是未建立。
  • 欄位“sc-content-len”定義為“響應的 HTTP Content-Length 標頭的值”。值為“1033”。這表明某種回復正在返回到負載均衡器。

所有這些都向我表明 CloudFront 已將請求發送到 ALB,但在某些時候出現了超時。我建議您找到 ALB 日誌,看看他們是否對此有所了解。我想查看它嘗試將請求發送到哪個伺服器,並仔細檢查它是否到達。

引用自:https://serverfault.com/questions/1091902