Kratak odgovor
Greška 502 Bad Gateway znači da Nginx ne može da dobije ispravan odgovor od backend servisa (PHP-FPM, Node.js, Gunicorn). Proverite da li backend proces radi, da li su soketi i portovi dostupni i da li su logovi puni grešaka. U većini slučajeva rešenje je restart backend servisa ili ispravka konfiguracije.
Kako se problem prepoznaje
- Sajt prikazuje belu stranicu sa tekstom 502 Bad Gateway
- Neke stranice rade, a dinamičke (PHP, API) vraćaju 502
- U error logu Nginx-a pojavljuje se connect() failed
- Backend servis (PHP-FPM, Node) je pao ili se restartuje
- 502 se pojavljuje povremeno, posebno pod opterećenjem
Najčešći uzroci
Backend servis ne radi
PHP-FPM, Node.js, Gunicorn ili drugi aplikativni server je pao ili je zaustavljen. Nginx tada nema kome da prosledi zahtev.
Pogrešan soket ili port u konfiguraciji
Nginx upućuje na nepostojeći Unix soket ili port na kojem backend ne sluša. Do greške dolazi i posle promene konfiguracije ili nadogradnje.
Preopterećen backend
Ako PHP-FPM ili aplikacija potroše sve resurse, ne mogu da prihvate nove zahteve. Nginx tada vraća 502 ili 504.
Dozvole nad soketom
Nginx korisnik (npr. www-data ili nginx) nema pravo pristupa Unix soketu. To se često dešava posle promene vlasnika ili SELinux politike.
Backend se ruši zbog greške u kodu
Fatalna greška u aplikaciji može da obori radni proces. U logovima se vidi segfault ili PHP Fatal error.
Rešenje korak po korak
- 1
Proverite status backend servisa
Pokrenite
systemctl status php8.2-fpm(ili odgovarajući servis:php-fpm,node,gunicorn). Ako je servis neaktivan, pokušajtesystemctl restart php8.2-fpm. Ako se odmah ponovo zaustavi, pređite na čitanje logova. - 2
Pregledajte Nginx error log
Otvorite
/var/log/nginx/error.log(ili putanju iznginx -T). Tražite linije saconnect() failedilino live upstreams. One pokazuju da li Nginx ne može da se poveže na soket ili port. - 3
Proverite da li backend sluša
Za Unix soket:
ls -l /run/php/php8.2-fpm.sock. Za TCP port:ss -tlnp | grep 3000. Ako nema izlaza, backend ne sluša i problem je u njegovoj konfiguraciji ili startu. - 4
Uskladite putanju u Nginx konfiguraciji
U fajlu sajta (npr.
/etc/nginx/sites-enabled/example.conf) proveritefastcgi_passiliproxy_pass. Putanja soketa ili port mora da odgovara onome što backend zaista koristi. Posle izmene pokrenitenginx -tpasystemctl reload nginx. - 5
Proverite dozvole nad soketom
Soket treba da bude vlasništvo korisnika pod kojim radi backend, a Nginx korisnik mora da ima pristup. Po potrebi podesite dozvole (npr.
chmod 660i odgovarajuću grupu) i restartujte oba servisa. - 6
Pratite logove aplikacije
Pogledajte PHP error log (
/var/log/php8.2-fpm.log),journalctl -u php8.2-fpm -n 50ili log aplikacije. Ako vidite fatalne greške, ispravite kod ili konfiguraciju pre daljeg restartovanja. - 7
Testirajte pristup lokalno na serveru
Sa servera pokrenite
curl -I -H 'Host: example.com' http://127.0.0.1icurl -I http://127.0.0.1:3000(ako aplikacija sluša na tom portu). Ako lokalno radi a spolja ne, problem je u mreži, firewall-u ili Nginx konfiguraciji. - 8
Restartujte servise po redu
Prvo restartujte backend (
systemctl restart php8.2-fpm), pa Nginx (systemctl restart nginx). Zatim ponovo učitajte sajt. Ako 502 i dalje postoji, vratite se na logove.
Ako ništa ne pomogne
Ako su servisi aktivni, soketi dostupni i logovi bez očigledne greške, proverite da li je problem u mreži ili SELinux-u. Komanda getenforce pokazuje da li je SELinux u režimu Enforcing; privremeno ga možete postaviti u Permissive (setenforce 0) radi testa, ali ga obavezno vratite u Enforcing (setenforce 1). Takođe proverite da li je disk pun (df -h) i da li ima dovoljno memorije (free -m). Ako se 502 javlja samo pod opterećenjem, povećajte broj PHP-FPM procesa ili worker_connections u Nginx-u. Za produkciono okruženje razmotrite monitoring koji će vas obavestiti pre nego što korisnici primete grešku.
Kako da sprečite da se ponovi
- Redovno pratite rad backend servisa i postavite alarm za pad
- Držite Nginx i PHP-FPM konfiguraciju usklađenu sa stvarnim soketima
- Pratite potrošnju resursa i povećajte limite na vreme
- Testirajte izmene konfiguracije sa `nginx -t` pre reload-a
Kada je bolje pozvati stručnjaka
Ako se greška ponavlja i zahteva izmene u konfiguraciji ili kodu, ili ako nemate pristup logovima i root dozvolama, bolje je da pozovete IT podršku. Oni mogu brzo da izoluju uzrok i spreče duži prekid rada sajta.
Održavanje IT infrastrukture · Serveri, mreže, backup, bezbednost i helpdeskČesta pitanja
Da li je 502 isto što i 504?
Nije. 502 znači da je backend vratio neispravan odgovor ili da Nginx nije mogao da se poveže, dok 504 znači da je backend predugo ćutao. U praksi se često rešavaju slično, proverom backend servisa i logova.
Zašto se 502 javlja samo na nekim stranicama?
Statične fajlove Nginx servira direktno, pa rade. Dinamičke stranice zavise od backend-a, pa one prijavljuju 502. To potvrđuje da je problem u aplikativnom serveru, a ne u Nginx-u.
Mogu li da restartujem samo PHP-FPM?
Da, ako je problem u PHP-FPM-u, dovoljan je `systemctl restart php8.2-fpm`. Nginx restartujte samo ako ste menjali njegovu konfiguraciju ili ako problem i dalje traje.