Řešení chyby 502 Bad Gateway a 504 Gateway Timeout Error na serveru Linux
Podrobný průvodce řešením problémů s Nginx, Apache, PHP-FPM a časovým limitem služby.
vidět na webových stránkách 502 Špatná brána a 504 Časový limit brány k chybám obvykle dochází, protože webový server nedostává správnou odpověď od back-endové služby. Touto službou může být PHP-FPM, backend Apache, aplikace Node.js, služba API herního panelu nebo jiná aplikace za proxy.
Tyto chyby jsou zvláště běžné v hostingu, herním panelu, WHMCS, Pterodactyl, vlastním administračním panelu a webových spouštěcích systémech.
1. Rozdíl mezi 502 a 504 Chyba
- 502 Špatná brána: Webový server se nemůže připojit k backendové službě nebo obdrží zkomolenou odpověď.
- Časový limit brány 504: Zdá se, že backendová služba odpovídá, ale odpověď není vrácena včas.
Takže 502 je spíše pád připojení/služby a 504 je problém s pomalostí nebo časovým limitem.
2. Kontrola stavů služeb
Nejprve zkontrolujte, zda běží webový server a služby PHP.
systemctl status nginx systemctl status apache2 systemctl status php-fpm
Na systémech CentOS, AlmaLinux nebo Rocky Linux může být služba PHP-FPM pojmenována:
systemctl status php-fpm systemctl status httpd
Pokud se služba zastavila, restartujte ji:
systemctl restart nginx systemctl restart php-fpm
3. Kontrola souborů protokolu
Není správné pokračovat v odhadování chyb 502 a 504. Soubor protokolu zobrazuje skutečnou příčinu chyby.
tail -n 100 /var/log/nginx/error.log tail -n 100 /var/log/apache2/error.log
Na systémech založených na CentOS:
tail -n 100 /var/log/httpd/error_log
V protokolech lze vidět následující prohlášení:
- connect() se nezdařilo: Nelze se připojit k backendové službě.
- upstream vypršel: Backendová služba reaguje pozdě.
- připojení odmítnuto: Služba nefunguje nebo dochází k přesměrování na nesprávný port.
- povolení odepřeno: Došlo k problému s oprávněním soketu nebo souboru.
4. PHP-FPM Socket nebo Port Control
Nginx se připojuje k PHP-FPM přes socket nebo port. Cesta PHP-FPM v konfiguračním souboru Nginx a skutečná hodnota naslouchání PHP-FPM musí být stejné.
grep -R "fastcgi_pass" /etc/nginx/sites-enabled/ grep -R "listen =" /etc/php/*/fpm/pool.d/www.conf
Například pokud Nginx používá:
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
Stejný soket by měl být naslouchán na straně PHP-FPM:
listen = /run/php/php8.2-fpm.sock
5. Zvýšení nastavení časového limitu
Chyby 504 se mohou vyskytovat ve velkých panelech pro zpracování, na herních trzích, v rozhraních API nebo v pomalu běžících skriptech PHP. Hodnoty časového limitu Nginx lze zvýšit.
nano /etc/nginx/nginx.conf
Do bloku http nebo příslušného bloku serveru lze přidat následující hodnoty:
proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; fastcgi_read_timeout 300;
Otestujte nastavení a restartujte Nginx:
nginx -t systemctl restart nginx
6. Kontrola limitů procesu PHP-FPM
Když se provoz zvýší, limity transakcí PHP-FPM mohou být nedostatečné. V tomto případě jsou požadavky zařazeny do fronty a dojde k vypršení časového limitu.
nano /etc/php/8.2/fpm/pool.d/www.conf
Příklad nastavení:
pm = dynamic pm.max_children = 30 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 10
Tyto hodnoty by měly být upraveny podle velikosti paměti RAM serveru. Nastavení příliš vysoké hodnoty zvyšuje spotřebu paměti RAM.
Časté chyby
- Změna nastavení bez prohlížení souboru protokolu
- Neaktualizuje se cesta soketu Nginx, i když se verze PHP změnila
- Skutečný pomalý dotaz se neopravuje zvýšením časového limitu
- Zvýšení limitů PHP-FPM bez výpočtu RAM
- Restartování služby bez testování konfigurace Nginx
FAQ
Je chyba 502 vždy způsobena Nginx?
Ne. Nginx je jen ten, který ukazuje chybu. Skutečný problém může být v PHP-FPM, backendu Apache, aplikaci Node.js nebo jiné službě.
Je zvýšení časového limitu definitivním řešením pro chyby 504?
Ne vždy. Zvýšení časového limitu poskytuje dočasnou úlevu. Skutečným řešením je najít problém s pomalým dotazem, náročným zpracováním nebo výkonem.
Je bezpečné restartovat PHP-FPM?
Je to obecně bezpečné, ale aktivní požadavky mohou být na krátkou dobu ovlivněny. V rušných systémech by měly být preferovány hodiny s nízkým provozem.
Doporučení ohledně výkonu
- Pravidelně kontrolujte verzi PHP-FPM a cestu soketu.
- Prozkoumejte pomalé protokoly dotazů ve webovém panelu a ve službách API.
- Pokud je RAM nedostatečná, nezvyšujte nevědomky hodnotu PHP-FPM max_children.
- Snižte zátěž backendu pomocí systému mezipaměti.
- Spravujte protokoly chyb dříve, než se rozrostou, pomocí logrotate.
Tento článek je speciálně připraven pro PvPServer.