Score:0

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

ธง 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.

Score:3
ธง gp
Tim

นี่ไม่ใช่คำตอบที่สมบูรณ์ แต่ยาวเกินไปสำหรับความคิดเห็น และอาจให้แนวคิดบางอย่างแก่คุณ ฉันจะลบมันเมื่อเราได้รับคำตอบที่แท้จริง

ความคิดบางอย่าง:

  • ช่อง "30.107" คือ "ใช้เวลา" (เพื่อดำเนินการตามคำขอ) ตาม หน้านี้. 30s เป็นความยาวหมดเวลา http มาตรฐานซึ่งน่าสนใจ
  • การตอบกลับสถานะ 504 หมายถึง "การหมดเวลาของเกตเวย์" รายละเอียดเพิ่มเติมคือ "เซิร์ฟเวอร์ในขณะที่ทำหน้าที่เป็นเกตเวย์หรือพร็อกซี ไม่ได้รับการตอบสนองอย่างทันท่วงทีจากเซิร์ฟเวอร์อัพสตรีมที่จำเป็นในการเข้าถึงเพื่อดำเนินการตามคำขอให้เสร็จสมบูรณ์"
  • OriginCommError ไม่ได้กำหนดไว้ในบันทึกข้อผิดพลาดของ CloudFront อย่างไรก็ตาม "ClientCommError â การตอบสนองต่อผู้ชมถูกขัดจังหวะเนื่องจากปัญหาการสื่อสารระหว่างเซิร์ฟเวอร์และผู้ชม" แนะนำว่าการเชื่อมต่อกับเซิร์ฟเวอร์ถูกขัดจังหวะแทนที่จะไม่ได้สร้าง
  • ฟิลด์ "sc-content-len" ถูกกำหนดเป็น "ค่าของส่วนหัวความยาวเนื้อหา HTTP ของการตอบกลับ" ด้วยค่า "1033" นั่นแสดงว่ามีการตอบกลับบางอย่างกลับมาที่โหลดบาลานเซอร์

ทั้งหมดนี้บอกฉันว่า CloudFront ได้ส่งคำขอไปยัง ALB แต่มีบางอย่างหมดเวลาในบางประเด็น ฉันขอแนะนำให้คุณค้นหาบันทึกของ ALB และดูว่าบันทึกเหล่านี้ให้แสงสว่างแก่คุณหรือไม่ ฉันต้องการดูว่าเซิร์ฟเวอร์ใดพยายามส่งคำขอและตรวจสอบอีกครั้งว่ามาถึงหรือไม่

Barry Chapman avatar
cn flag
ฉันสามารถจำกัดปัญหาให้แคบลงตามความคิดเห็นของคุณ คำขอนั้นส่งไปยัง nginx จริง ๆ อย่างไรก็ตาม - PHP FPM สำลักคำขอและด้วยเหตุผลแปลก ๆ บางประการที่ไม่ได้บันทึกข้อผิดพลาดร้ายแรง nginx รายงานความล้มเหลวอัปสตรีมไปยัง CloudFront ขอบคุณสำหรับความช่วยเหลือ
Tim avatar
gp flag
Tim
ยินดีต้อนรับ :) ฉันสงสัยว่ามันเป็น PHP หรือไม่ แต่อย่างที่คุณบอกว่ามันไม่ถึง Nginx คุณต้องติดตามมันก่อน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา