Điểm:0

Why is a post/upload of a 100k JSON file to an AWS CloudFront endpoint resulting in 504 error?

lá cờ cn

On a wordpress site, we have requests coming in to CloudFront, which sends the request to origin (if necessary) which goes through an ELB, and to two or three instances that will service the request.

Most requests work, but when we upload a JSON file to admin-ajax.php, it results in a 504 error that we captured from the CloudFront logs:

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    -   -

The error appears to be an OriginCommError, but I cannot see why it is getting that error. Tailing the logs on our web servers on the instances shows that the request is not even reaching there.

I am not exactly sure why some requests would work and some wouldn't. To add further conclusion, when binary files in the media library are uploaded to async-upload.php, it works.

We use nginx as a webserver on the front end using php-fpm for processing php.

Điểm:3
lá cờ gp
Tim

Đây không phải là câu trả lời đầy đủ nhưng quá dài để nhận xét và nó có thể cung cấp cho bạn một số ý tưởng. Tôi sẽ xóa nó khi chúng ta có câu trả lời thực sự.

Một vài suy nghĩ:

  • Trường "30.107" là "thời gian" (để xử lý yêu cầu) theo trang này. 30s là độ dài thời gian chờ http tiêu chuẩn, điều này thật thú vị.
  • Phản hồi trạng thái 504 có nghĩa là "hết thời gian chờ cổng". Chi tiết hơn là "Máy chủ, trong khi đóng vai trò là cổng hoặc proxy, đã không nhận được phản hồi kịp thời từ máy chủ ngược dòng mà nó cần truy cập để hoàn tất yêu cầu."
  • OriginCommError không được xác định trong nhật ký lỗi CloudFront. Tuy nhiên "ClientCommError â Phản hồi cho người xem bị gián đoạn do sự cố giao tiếp giữa máy chủ và người xem." gợi ý rằng kết nối đến máy chủ đã bị gián đoạn chứ không phải nó không được thiết lập.
  • Trường "sc-content-len" được định nghĩa là "Giá trị của tiêu đề HTTP Content-Length của phản hồi." với giá trị "1033". Điều đó cho thấy một số loại phản hồi đang quay trở lại bộ cân bằng tải.

Tất cả điều này gợi ý cho tôi rằng CloudFront đã gửi yêu cầu tới ALB nhưng có điều gì đó đã hết thời gian vào một thời điểm nào đó. Tôi khuyên bạn nên tìm nhật ký ALB và xem liệu chúng có làm sáng tỏ vấn đề này không. Tôi muốn xem nó đã cố gửi yêu cầu đến máy chủ nào và kiểm tra kỹ xem nó có đến hay không.

Barry Chapman avatar
lá cờ cn
Tôi đã có thể thu hẹp vấn đề dựa trên phản hồi của bạn. Tuy nhiên, yêu cầu thực sự đã được gửi tới nginx - PHP FPM đã bị chặn theo yêu cầu và vì một lý do kỳ lạ nào đó đã không ghi lại lỗi nghiêm trọng. Lỗi ngược dòng đã được nginx báo cáo cho CloudFront. Cám ơn sự giúp đỡ của bạn
Tim avatar
lá cờ gp
Tim
Chào mừng :) Tôi đã tự hỏi liệu đó có phải là PHP hay không nhưng như bạn đã nói rằng nó chưa đến được Nginx, bạn phải lần theo dấu vết của nó trước.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.