O eroare 504 Gateway Timeout în Nginx înseamnă că serverul care rulează Nginx nu a putut primi un răspuns de la serverul proxy în perioada de timp specificată. Acest lucru se întâmplă, de obicei, deoarece serverul proxy nu poate procesa solicitarea în timpul specificat sau din cauza unor probleme de conexiune între Nginx și serverul proxy.
Eroarea apare atunci când serverul Nginx rulează în modul proxy. Acest lucru se întâmplă atunci când se utilizează php-fpm sau Apache. Dacă o traducem din engleză în rusă, obținem următoarele - timpul de așteptare pentru un răspuns de la server a fost depășit.
Mai multe motive pentru acest comportament:
Acum să vorbim despre ce puteți face și cum să remediați eroarea 504 Gateway Timeout.
Primul lucru pe care trebuie să îl încercați în practică este că, dacă serverul dvs., php-fpm sau apache nu dispune de resurse de sistem, cum ar fi memoria sau CPU, vedeți memoria RAM liberă
folosind comanda free:
$ free -h
Puteți afla sarcina CPU cu ajutorul comenzii htop
:
$ htop
Dacă vedeți că PHP ocupă tot timpul CPU, atunci înseamnă că problema este legată de resursele serverului. Puteți încerca să vă ocupați de motorul site-ului, să optimizați resursa sau să alegeți un server VPS puternic.
A doua opțiune - dacă a fost planificată astfel încât scriptul să funcționeze pentru o perioadă lungă de timp. În acest caz, trebuie să configurați Nginx pentru a aștepta un răspuns de la Apache sau php-fpm. Pentru a rezolva problema în cazul php-fpm, trebuie doar să adăugați două linii la blocul de configurare fastgci:
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
300 înseamnă 300 de secunde, pentru majoritatea scripturilor, acest lucru este suficient, dar, de asemenea, nu este dificil să setați mai mult dacă este necesar. De asemenea, eroarea 504 poate apărea atunci când Nginx este utilizat ca proxy pentru Apache sau orice alt server web, atunci trebuie să configurați și timeout-ul proxy.
Adăugați aceste linii la secțiunea server
:
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
În acest caz, avem un timeout de 600 de secunde.
Acum trebuie să repornim Nginx:
$ sudo systemctl restart nginx
Un alt motiv și soluția sa dacă scriptul se blochează. Dacă rulați singur scriptul, veți vedea imediat ce se blochează, dar dacă o astfel de eroare este întâlnită de utilizatori, este o problemă mai gravă. Puteți vedea dacă utilizatorii dvs. întâmpină astfel de erori și unde apar acestea prin utilizarea comenzii:
$ fgrep -i " 504 " /var/log/nginx/access.log
Informații mai detaliate pot fi văzute uneori în error.log
:
$ fgrep -i " 504 " /var/log/nginx/error.log
Mai mult, dacă php-fpm este problema, puteți urmări ce scripturi rulează lent folosind funcția integrată slow-log
.
Pentru a o activa, adăugați următoarele linii la configurația piscinei dvs:
$ sudo vi /etc/php-fpm.d/www.conf
slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s
Acest lucru finalizează instrucțiunea.