Puncte:0

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

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

Puncte:3
drapel gp
Tim

Acesta nu este un răspuns complet, dar este prea lung pentru un comentariu și s-ar putea să vă ofere câteva idei. Îl voi șterge când ajungem la un răspuns real.

Cateva ganduri:

  • Câmpul „30.107” este „timp luat” (pentru a procesa cererea) conform această pagină. 30s este o lungime standard de timeout http, ceea ce este interesant.
  • Răspunsul de stare 504 înseamnă „timeout gateway”. Mai multe detalii sunt „Serverul, deși acționa ca gateway sau proxy, nu a primit un răspuns în timp util de la un server din amonte pe care trebuia să-l acceseze pentru a finaliza cererea”.
  • OriginCommError nu este definit în jurnalele de erori CloudFront. Cu toate acestea, „ClientCommError â Răspunsul către vizualizator a fost întrerupt din cauza unei probleme de comunicare între server și vizualizator”. sugerează că conexiunea la server a fost întreruptă în loc să nu fie stabilită.
  • Câmpul „sc-content-len” este definit ca „Valoarea antetului HTTP Content-Length al răspunsului”. cu valoarea „1033”. Asta sugerează că un fel de răspuns se întoarce la echilibrul de încărcare.

Toate acestea îmi sugerează că CloudFront a trimis cererea către ALB, dar ceva expiră la un moment dat. V-aș sugera să găsiți jurnalele ALB și să vedeți dacă fac lumină în acest sens. Aș dori să văd la ce server a încercat să trimită cererea și să verific dacă a sosit.

Barry Chapman avatar
drapel cn
Am reușit să restrâng problema pe baza feedback-ului dvs. Solicitarea ajungea într-adevăr la nginx, totuși - PHP FPM s-a sufocat cu o solicitare și, dintr-un motiv ciudat, nu a înregistrat eroarea fatală. Eșecul în amonte a fost raportat de nginx către CloudFront. Vă mulțumim pentru ajutor
Tim avatar
drapel gp
Tim
Bine ați venit :) Mă întrebam dacă este PHP, dar așa cum ați spus că nu a ajuns la Nginx, a trebuit să îl urmăriți mai întâi.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.