Preskoči na sadržaj

Nginx 502 Bad Gateway: kako da vratite sajt u rad

Srednje 15 min Ažurirano:

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. 1

    Proverite status backend servisa

    Pokrenite systemctl status php8.2-fpm (ili odgovarajući servis: php-fpm, node, gunicorn). Ako je servis neaktivan, pokušajte systemctl restart php8.2-fpm. Ako se odmah ponovo zaustavi, pređite na čitanje logova.

  2. 2

    Pregledajte Nginx error log

    Otvorite /var/log/nginx/error.log (ili putanju iz nginx -T). Tražite linije sa connect() failed ili no live upstreams. One pokazuju da li Nginx ne može da se poveže na soket ili port.

  3. 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. 4

    Uskladite putanju u Nginx konfiguraciji

    U fajlu sajta (npr. /etc/nginx/sites-enabled/example.conf) proverite fastcgi_pass ili proxy_pass. Putanja soketa ili port mora da odgovara onome što backend zaista koristi. Posle izmene pokrenite nginx -t pa systemctl reload nginx.

  5. 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 660 i odgovarajuću grupu) i restartujte oba servisa.

  6. 6

    Pratite logove aplikacije

    Pogledajte PHP error log (/var/log/php8.2-fpm.log), journalctl -u php8.2-fpm -n 50 ili log aplikacije. Ako vidite fatalne greške, ispravite kod ili konfiguraciju pre daljeg restartovanja.

  7. 7

    Testirajte pristup lokalno na serveru

    Sa servera pokrenite curl -I -H 'Host: example.com' http://127.0.0.1 i curl -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. 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.

Podeli
Niste našli rešenje?AI IT asistent je dostupan 24/7. Opišite problem ili pošaljite screenshot greške i dobićete uputstvo za vaš slučaj.Pitajte AI IT asistenta