Fizetési módok Abuse

Fix 504 átjáró időn kívül Nginx

20.02.2024, 23:31

Az 504 Gateway Timeout hiba az Nginxben azt jelenti, hogy az Nginxet futtató kiszolgáló nem tudott választ kapni a proxy-kiszolgálótól a megadott időn belül. Ez általában azért történik, mert a proxykiszolgáló nem tudja feldolgozni a kérést a megadott időn belül, vagy az Nginx és a proxykiszolgáló közötti kapcsolati problémák miatt.

Miért jelenik meg az 504 Gateway Timeout

A hiba akkor jelentkezik, ha az Nginx kiszolgáló proxy módban fut. Ez akkor fordul elő, ha php-fpm vagy Apache programot használ. Ha lefordítjuk angolról oroszra, a következőt kapjuk - a szerver válaszára várakozás ideje túllépte.

Ennek a viselkedésnek több oka is lehet:

  • A PHP vagy más nyelvű szkript teljesen leállt, és már nem ad vissza semmilyen választ;
  • a szkript nagyon hosszú ideig fut, de az Nginxnek van egy olyan időintervalluma beállítva, amely visszaállítja a kapcsolatot, ha a célszerver nem válaszolt a kérésre a megadott időn belül;
  • a kiszolgáló túlterhelt, és nincs ideje az összes ügyfél kiszolgálására és az összes Nginx-kérésre adott válaszok visszaküldésére.

Most beszéljünk arról, hogy mit tehet és hogyan javíthatja az 504 Gateway Timeout hibát.

Hogyan lehet kijavítani az 504 gateway time out Nginx hibát?

Az első dolog, amit a gyakorlatban ki kell próbálni, hogy ha a szerver, a php-fpm vagy az apache hiányzik a rendszer erőforrásaiból, például memóriából vagy CPU-ból, nézze meg a szabad RAM-ot a free parancs segítségével:

$ free -h

A CPU-terhelést a htop paranccsal tudhatod meg:

$ htop

Ha azt látod, hogy a PHP az összes CPU-időt lefoglalja, akkor ez azt jelenti, hogy a szerver erőforrásaival van a probléma. Megpróbálhat foglalkozni a webhely motorjával, optimalizálhatja az erőforrást, vagy választhat egy nagy teljesítményű VPS-szervert.

A második lehetőség - ha úgy tervezték, hogy a szkript hosszú ideig működött. Ebben az esetben az Nginxet úgy kell beállítania, hogy várjon az Apache vagy a php-fpm válaszára. A probléma megoldásához a php-fpm esetében csak két sort kell hozzáadni a fastgci konfigurációs blokkjához:

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

A 300 300 másodpercet jelent, a legtöbb szkript esetében ez elegendő, de szükség esetén nem nehéz többet is beállítani. Az 504-es hiba akkor is előfordulhat, ha az Nginxet proxyként használjuk az Apache vagy más webszerverhez, ekkor szintén be kell állítani a proxy várakozási idejét.

Add hozzá ezeket a sorokat a szerver szakaszhoz:

proxy_connect_timeout 600;

proxy_send_timeout 600;

proxy_read_timeout 600;

send_timeout 600;

Ebben az esetben 600 másodperces időkorlátot állítottunk be.

Most újra kell indítanunk az Nginxet:

$ sudo systemctl restart nginx

Egy másik ok és annak megoldása, ha a szkript akadozik. Ha maga futtatja a szkriptet, azonnal látni fogja, hogy mi akadozik, de ha ilyen hibával találkoznak a felhasználók, az már komolyabb probléma. A parancs segítségével láthatod, hogy a felhasználóid találkoznak-e ilyen hibákkal, és hol fordulnak elő:

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

Részletesebb információk néha az error.log fájlban láthatók:

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

Továbbá, ha a php-fpm a probléma, akkor a beépített slow-log funkcióval nyomon követheti, hogy mely szkriptek futnak lassan.

Ennek aktiválásához a következő sorokat kell hozzáadni a pool konfigurációjához:

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

Ezzel befejeződik az utasítás.