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.
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:
Most beszéljünk arról, hogy mit tehet és hogyan javíthatja az 504 Gateway Timeout 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.