Pogreška 502 Bad Gateway: uzroci i kako je popraviti
· 6 min čitanja
Što pogreška znači
502 je odgovor servera koji radi. Web server ispred (nginx, Apache, load balancer ili CDN poput Cloudflarea) primio je zahtjev, proslijedio ga aplikaciji iza sebe (PHP-FPM-u, Node.js ili Python procesu, backend serveru) i nije dobio upotrebljiv odgovor: veza je odbijena, prekinuta ili je vratila besmislice. „Gateway“ je server ispred; „bad“ je ono što je stiglo odostraga.
Dakle, 502 govori dvije stvari odjednom: prednji dio radi, a stražnji ne radi ili je pokvaren. To znatno sužava potragu.
Uobičajeni uzroci
- Proces aplikacije ne radi. PHP-FPM se srušio ili je zaustavljen, Node.js proces je umro, kontejner je izašao. Prednji dio se uopće ne može povezati.
- Aplikacija je preopterećena. Svi PHP-FPM workeri su zauzeti, red je pun, nove veze se odbijaju. Često nakon naglog porasta prometa ili spore upite baze podataka koji blokira svakog workera.
- Pogrešan socket ili port u konfiguraciji. Nakon ažuriranja ili promjene verzije PHP-a nginx i dalje pokazuje na
php8.2-fpm.sock, dok novi pool sluša naphp8.4-fpm.sock. - Prestrogo postavljeni istekovi vremena. Backend odgovara, ali kasnije nego što je prednji dio spreman čekati. Neke postavke to prijavljuju kao 502, druge kao 504 Gateway Timeout.
- Backend šalje preveliko zaglavlje ili nevažeći odgovor. Tipično za frameworke koji u kolačiće stavljaju mnogo toga; nginx tada zapisuje „upstream sent too big header“.
- CDN ne može doći do vašeg servera. Uz Cloudflare ispred, stranica 502 s Cloudflare logotipom znači da Cloudflare od vašeg izvora nije dobio ništa: vatrozid, pogrešan IP nakon selidbe ili je server jednostavno nedostupan.
Ako ste posjetitelj
502 na tuđoj stranici ne možete popraviti. Ponovno učitajte jednom nakon minute; ako se nastavi, vlasnik stranice mora djelovati. Za vlastitu stranicu čitajte dalje.
Ako je riječ o vašoj stranici: prvo provjerite
Ne radi li za sve? Pokrenite provjeru ispada web stranice. Prikazuje statusni kôd izvana i je li odgovorio CDN ili izvor.
Zajednički hosting ili alat za izradu stranica? 502 je tamo gotovo uvijek problem hostinga (preopterećen PHP pool na zajedničkom čvoru). Preskočite na poruku za svoj hosting u nastavku.
Vlastiti server: prijavite se putem SSH-a i pitajte web server što je pošlo po zlu.
# nginx: zadnje pogreške, najnovije na dnu
sudo tail -n 50 /var/log/nginx/error.log
# Apache (Debian/Ubuntu)
sudo tail -n 50 /var/log/apache2/error.log
Tipični retci i što znače:
connect() to unix:/run/php/php8.3-fpm.sock failed (2: No such file or directory): PHP-FPM ne radi ili je putanja socketa pogrešna.connect() failed (111: Connection refused) while connecting to upstream: port backenda ne sluša.upstream prematurely closed connection: proces backenda srušio se tijekom odgovaranja, često zbog PHP fatalne pogreške ili nedostatka memorije.upstream sent too big header: povećajte buffere (vidjeti u nastavku).(11: Resource temporarily unavailable): svi PHP-FPM workeri su zauzeti.
Popravci na vlastitom serveru
1. Pokrenite zaustavljenu uslugu
# pronađite verziju PHP-FPM-a koju koristite
systemctl list-units --type=service | grep -E 'php|fpm'
systemctl status php8.3-fpm
sudo systemctl start php8.3-fpm
# Node.js ili Python aplikacije kojima upravlja systemd
sudo systemctl restart myapp
Ako se usluga ne želi pokrenuti, razlog je u journalctl -u php8.3-fpm -n 50. Najčešći je pun disk (df -h), drugi po redu sintaksna pogreška u konfiguraciji poola (sudo php-fpm8.3 -t).
2. Popravite socket ili port
Usporedite na što se nginx povezuje s onim na čemu PHP-FPM sluša:
grep -r fastcgi_pass /etc/nginx/sites-enabled/
grep -r '^listen' /etc/php/*/fpm/pool.d/
Dvoje se mora podudarati. Nakon promjene uvijek testirajte konfiguraciju prije ponovnog učitavanja:
sudo nginx -t && sudo systemctl reload nginx
Uz Apache i PHP-FPM putem mod_proxy_fcgi ista provjera vrijedi za redak SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"; testirajte pomoću sudo apachectl configtest.
3. Dajte PHP-FPM-u prostora
Ako zapisnik pogrešaka kaže da su workeri zauzeti ili server reached pm.max_children, podignite ograničenje u datoteci poola (/etc/php/8.3/fpm/pool.d/www.conf):
pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
Svaki worker treba memoriju (za WordPress često 30 do 80 MB); provjerite free -m prije nego što povećate broj i potražite sporu upitu ili dodatak koji workere uopće drži zauzetima.
4. Povećajte buffere za velika zaglavlja
U server bloku nginxa:
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
proxy_buffers 8 16k;
proxy_buffer_size 32k;
5. Posebnosti WordPressa
502 odmah nakon ažuriranja dodatka ili teme obično znači da PHP-u ponestaje memorije ili pri svakom zahtjevu nailazi na fatalnu pogrešku. Preimenujte mapu dodatka putem SFTP-a ili SSH-a kako biste ga isključili (wp-content/plugins/plugin-name u plugin-name.off), zatim ponovno učitajte stranicu. Podignite memory_limit u poolu ili php.ini ako journalctl pokazuje „Allowed memory size exhausted“. Ako koristite WP-CLI: wp plugin deactivate plugin-name.
6. Iza Cloudflarea
Provjerite odgovara li izvor izravno: curl -I https://YOUR-SERVER-IP -H 'Host: example.com' -k. Ako to radi, vatrozid na serveru možda blokira Cloudflareove raspone adresa ili DNS zapis u Cloudflareu pokazuje na stari IP.
Kad je problem vašeg hostinga
Na zajedničkom hostingu ne možete ponovno pokrenuti PHP-FPM. Pošaljite svom hostingu ovo, uz vrijeme i točnu pogrešku:
Poštovani, moja web stranica example.com vraća „502 Bad Gateway“ otprilike od 14:30 UTC. Vanjska provjera to potvrđuje; sa svoje strane nisam ništa mijenjao. Možete li, molim, provjeriti PHP procese i web server na mom hosting računu i javiti mi kad ponovno radi?
Sprječavanje sljedećeg
502 je gotovo uvijek zaustavljen ili preopterećen backend, a oboje je vidljivo prije nego što posjetitelji primijete: PHP-FPM usluga koja je stala, memorija koja ponestaje, disk koji se puni. Nadzor servera s agentom izvješćuje upravo o tome iznutra, a provjere web stranice izvana hvataju 502 čim se pojavi. Na vlastitom serveru Quick Fix može ponovno pokrenuti zaustavljenu uslugu nakon uspješnog testa konfiguracije; ako je uzrok dublji, preuzima Deep Fix kroz cijelu noć i dan.
Što sad
Provjerite izvana
Je li stranica nedostupna svima ili samo vama i što server odgovara? Besplatno, bez registracije.
Provjera ispada web straniceIspad? Mi uskačemo.
Na vlastitom serveru ili u web prostoru s SSH pristupom: Quick Fix po fiksnoj cijeni za uobičajene uzroke, Deep Fix uz naplatu u blokovima od 15 minuta za ostalo, kroz cijelu noć i dan. Cijena prije narudžbe.
Naručite popravakViše vodiča
- Vaša web stranica ne radi. Evo što učiniti u prvih 15 minuta.
- Server ne radi: što prvo provjeriti i kojim redom
- Pogreška 503 Service Unavailable: preopterećenje ili održavanje?
- Pogreška 504 Gateway Timeout: što znači i kako je popraviti
- DNS_PROBE_FINISHED_NXDOMAIN: uzroci i popravci
- ERR_CONNECTION_REFUSED: uzroci i kako ga popraviti
- „Vaša veza nije privatna“: upozorenje o SSL certifikatu