Metody płatności Abuse

Poprawka 504 przekroczenia czasu bramy Nginx

20.02.2024, 23:31

Błąd 504 Gateway Timeout w Nginx oznacza, że serwer z uruchomionym Nginx nie był w stanie otrzymać odpowiedzi od serwera proxy w określonym czasie. Zwykle dzieje się tak, ponieważ serwer proxy nie może przetworzyć żądania w określonym czasie lub z powodu problemów z połączeniem między Nginx a serwerem proxy.

Dlaczego pojawia się 504 Gateway Timeout

Błąd pojawia się, gdy serwer Nginx działa w trybie proxy. Dzieje się tak, gdy używany jest php-fpm lub Apache. Jeśli przetłumaczymy to z angielskiego na rosyjski, otrzymamy następujące - czas oczekiwania na odpowiedź z serwera został przekroczony.

Przyczyn takiego zachowania może być kilka:

  • PHP lub inny skrypt językowy całkowicie się zawiesił i nie zwraca już żadnej odpowiedzi;
  • skrypt działa przez bardzo długi czas, ale Nginx ma skonfigurowany interwał resetowania połączenia, jeśli serwer docelowy nie odpowiedział na żądanie w wyznaczonym czasie;
  • serwer jest przeciążony i nie ma czasu na obsługę wszystkich klientów i zwracanie odpowiedzi na wszystkie żądania Nginx.

Porozmawiajmy teraz o tym, co można zrobić i jak naprawić błąd 504 Gateway Timeout.

Jak naprawić błąd 504 Gateway Time Out Nginx?

Pierwszą rzeczą do wypróbowania w praktyce jest to, że jeśli serwerowi, php-fpm lub apache brakuje zasobów systemowych, takich jak pamięć lub procesor, sprawdź wolną pamięć RAM za pomocą polecenia free:

$ free -h

Obciążenie procesora można sprawdzić za pomocą polecenia htop:

$ htop

Jeśli widzisz, że PHP zajmuje cały czas procesora, oznacza to, że problem dotyczy zasobów serwera. Możesz spróbować poradzić sobie z silnikiem strony, zoptymalizować zasoby lub wybrać wydajny serwer VPS.

Druga opcja - jeśli skrypt został zaplanowany tak, aby działał przez długi czas. W takim przypadku należy skonfigurować Nginx, aby czekał na odpowiedź od Apache lub php-fpm. Aby rozwiązać problem w przypadku php-fpm, wystarczy dodać dwie linijki do bloku konfiguracyjnego fastgci:

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

300 oznacza 300 sekund, dla większości skryptów to wystarczy, ale nie jest też trudno ustawić więcej, jeśli zajdzie taka potrzeba. Błąd 504 może również wystąpić, gdy Nginx jest używany jako serwer proxy dla Apache lub innego serwera WWW, wtedy również należy skonfigurować czas oczekiwania dla serwera proxy.

Dodaj te linie do sekcji serwera:

proxy_connect_timeout 600;

proxy_send_timeout 600;

proxy_read_timeout 600;

send_timeout 600;

W tym przypadku czas oczekiwania wynosi 600 sekund.

Teraz musimy ponownie uruchomić Nginx:

$ sudo systemctl restart nginx

Kolejny powód i jego rozwiązanie, jeśli skrypt się zawiesza. Jeśli sam uruchomisz skrypt, od razu zobaczysz, co się zawiesza, ale jeśli taki błąd napotkają użytkownicy, jest to poważniejszy problem. Za pomocą polecenia można sprawdzić, czy użytkownicy napotykają takie błędy i gdzie one występują:

$ fgrep -i " 504 " /var/log/nginx/access.log

Bardziej szczegółowe informacje można czasem zobaczyć w error.log:

$ fgrep -i " 504 " /var/log/nginx/error.log

Ponadto, jeśli problemem jest php-fpm, można śledzić, które skrypty działają wolno, korzystając z wbudowanej funkcji slow-log.

Aby ją aktywować, należy dodać następujące linie do konfiguracji puli:

$ sudo vi /etc/php-fpm.d/www.conf
slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s

To kończy instrukcję.