Skip to main content

502 Bad Gateway: ko tas nozīmē un kā to novērst

· 3 min read
Customer Care Engineer

502-bad-gateway-error-nginx-php-fpm-fix-guide

Jūs atverat savu vietni, un satura vietā redzat tukšu lapu ar uzrakstu 502 Bad Gateway. Izskatās biedējoši, taču vairumā gadījumu to var novērst diezgan vienkārši. Izskaidrosim, kas notiek un kā atjaunot vietnes darbību.

Ko patiesībā nozīmē 502?

Kad apmeklētājs pieprasa lapu, pieprasījums parasti iziet caur diviem līmeņiem: frontend tīmekļa serveri (parasti Nginx) un backend lietojumprogrammu serveri (PHP-FPM, Apache, Node.js vai citu). Nginx saņem pieprasījumu, pārsūta to uz backend un gaida atbildi.

502 Bad Gateway nozīmē, ka Nginx mēģināja saņemt atbildi no backend, bet saņēma kaut ko nederīgu vai nesaņēma atbildi vispār. Backend vai nu avarēja, vai atteica savienojumu, vai atgrieza kaut ko, ko Nginx nevarēja apstrādāt.

info

Izplatīts pārpratums: 502 nenozīmē, ka jūsu serveris nedarbojas. Pats serveris ir kārtībā - problēmas ir lietotnei aiz Nginx.

Biežākie cēloņi

Backend pakalpojums ir apstājies. Tas ir biežākais iemesls. PHP-FPM ir avarējis, Apache ir pārstājis reaģēt vai Node.js process ir klusi nomiris. Nginx nav ar ko sazināties.

Serverim trūkst RAM. Kad atmiņas kļūst maz, Linux var automātiski nogalināt procesus, kas patērē daudz resursu. Šo mehānismu sauc par OOM killer, un PHP-FPM vai MySQL parasti ir tā pirmie upuri. Ja tas notiek regulāri, apsveriet iespēju pievienot swap failu kā drošības tīklu.

PHP-FPM darbinieku pūls ir izsmelts. Ja jūsu vietne saņem vairāk vienlaicīgu pieprasījumu, nekā PHP-FPM spēj apstrādāt, jaunie pieprasījumi nostājas rindā un galu galā iestājas taimauts. Tas bieži notiek, kad meklētājprogrammu roboti pārāk agresīvi indeksē vietni - par to, kā ar to tikt galā, rakstījām mūsu rokasgrāmatā par robotu bloķēšanu.

Nepareizi konfigurēts socket vai ports. Nginx sagaida PHP-FPM uz konkrēta Unix socket vai TCP porta. Ja ceļš Nginx konfigurācijā nesakrīt ar PHP-FPM konfigurāciju, 502 kļūdas parādīsies uzreiz pēc jebkurām izmaiņām.

Kā to diagnosticēt

Lai izpildītu tālāk minētās darbības, pieslēdzieties serverim caur SSH. Kā to izdarīt, aprakstījām mūsu SSH rakstā.

1. solis. Pārbaudiet, vai backend darbojas

Pārbaudiet backend pakalpojuma statusu:

sudo systemctl status php8.2-fpm

Aizstājiet php8.2-fpm ar savu faktisko PHP versiju vai pakalpojuma nosaukumu. Ja izvadā redzat inactive (dead) vai failed, tā ir jūsu problēma. Restartējiet pakalpojumu:

sudo systemctl restart php8.2-fpm

Pēc tam vēlreiz pārbaudiet statusu, lai pārliecinātos, ka pakalpojums ir veiksmīgi startējis.

2. solis. Pārbaudiet Nginx kļūdu žurnālu

Kļūdu žurnāls gandrīz vienmēr precīzi norāda, kas nogāja greizi:

sudo tail -30 /var/log/nginx/error.log

Ja izmantojat FASTPANEL®, žurnālus varat apskatīt arī tieši paneļa saskarnē: atveriet vietnes karti, dodieties uz sadaļu "Logs" un pārbaudiet cilni "Frontend Error Log".

Visbiežāk sastopamie kļūdu paziņojumi un to nozīme:

connect() failed - Connection refused - backend pakalpojums nedarbojas. Restartējiet to, kā parādīts 1. solī.

connect() failed - No such file or directory - Nginx mēģina pieslēgties Unix socket, kas neeksistē. Pārbaudiet, vai socket ceļš Nginx konfigurācijā sakrīt ar to, ko faktiski izveido PHP-FPM.

upstream sent too big header - backend atgrieza pārāk lielus HTTP galvenes. Pievienojiet šīs rindas savai Nginx vietnes konfigurācijai server blokā:

fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;

Pēc rediģēšanas pārbaudiet konfigurāciju un pārlādējiet Nginx:

sudo nginx -t && sudo systemctl reload nginx

3. solis. Pārbaudiet servera resursus

free -h

Ja kolonna available rāda mazāk nekā 100-200 MB brīvas atmiņas, serverim, visticamāk, trūkst RAM. Pārbaudiet, kas patērē atmiņu:

ps aux --sort=-%mem | head -10
warning

Ja problēmas cēlonis ir atmiņas trūkums, ātrākais pagaidu risinājums ir swap faila pievienošana. Tomēr swap uz diska ir daudz lēnāks nekā RAM, un to nedrīkst uzskatīt par pastāvīgu risinājumu. Ja serverim regulāri trūkst atmiņas, ir laiks optimizēt lietotnes vai pāriet uz plānu ar lielāku RAM apjomu.

Secinājums

502 Bad Gateway gandrīz vienmēr ir backend problēma - apstājies pakalpojums, izsmelti darbinieki vai nepietiek atmiņas. Pārbaudiet backend statusu, izlasiet Nginx kļūdu žurnālu un apskatiet resursu lietojumu. Lielākajā daļā gadījumu atbildi atradīsiet dažu minūšu laikā.

Ja vēlaties, lai kāds palīdz, kodu.cloud mēs nodrošinām bezmaksas tehnisko atbalstu 24/7 ar katru VPS un dediķēto serveri. Visi mūsu klienti saņem arī FASTPANEL® Extended bez papildu maksas, kas ievērojami atvieglo žurnālu analīzi un pakalpojumu pārvaldību caur tīmekļa saskarni.