Amazon-Web-Services
為什麼將 100k JSON 文件發布/上傳到 AWS CloudFront 終端節點會導致 504 錯誤?
在 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 日誌,看看他們是否對此有所了解。我想查看它嘗試將請求發送到哪個伺服器,並仔細檢查它是否到達。