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

Atverat savu vietni, un vietā, kur redzat saturu, parādās tukšs ekrāns ar uzrakstu 502 Bad Gateway. Tas izskatās biedējoši, taču vairumā gadījumu problēmas novēršana ir vienkārša. Aplūkosim, kas notiek, un kā atgūt jūsu vietni.
Ko patiesībā nozīmē 502?
Kad apmeklētājs pieprasa lapu, pieprasījums parasti iziet cauri diviem slāņiem: frontend tīmekļa serverim (parasti Nginx) un backend lietojumprogrammu serverim (PHP-FPM, Apache, Node.js vai kaut kam citam). 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 vispār nesaņēma atbildi. Backend vai nu avarēja, atteicās no savienojuma, vai atgrieza kaut ko tādu, ko Nginx nevarēja saprast.
Izplatīts nepareizs priekšstats: 502 nenozīmē, ka jūsu serveris ir nedarbojas. Serveris pats ir kārtībā – problēmas ir lietojumprogrammai aiz Nginx.
Visbiežākie iemesli
Backend pakalpojums ir apstājies. Šis ir numur viens iemesls. PHP-FPM avarēja, Apache apstājās, vai Node.js process klusi izbeidzās. Nginx nav ar ko runāt.
Serverim beidzas RAM. Kad atmiņa beidzas, Linux var automātiski izbeigt resursus patērējošus procesus. Šis mehānisms tiek saukts par OOM killer (Out-Of-Memory killer), un parasti tā pirmie upuri ir PHP-FPM vai MySQL. Ja tas notiek regulāri, apsveriet swap faila pievienošanu kā drošības tīklu.
PHP-FPM darba kopums ir izsmelts. Ja jūsu vietne saņem vairāk vienlaicīgu pieprasījumu nekā PHP-FPM spēj apstrādāt, jauni pieprasījumi tiek rindoti un galu galā pārsniedz laiku. Tas bieži notiek, kad meklētājprogrammu roboti pārāk agresīvi pārlūko jūsu vietni – par to, kā tikt galā ar to, esam rakstījuši mūsu ceļvedī par botu bloķēšanu.
Nepareizi konfigurēts ligzda vai ports. Nginx sagaida atrast PHP-FPM noteiktā Unix ligzdā vai TCP portā. Ja ceļš Nginx konfigurācijā nesakrīt ar PHP-FPM konfigurāciju, 502 kļūdas parādīsies tūlīt pēc jebkuras izmaiņas.
Kā to diagnosticēt
Lai veiktu turpmākās darbības, izveidojiet savienojumu ar savu serveri, izmantojot SSH. Kā to izdarīt, varat uzzināt mūsu SSH rakstā.
1. darbība. Pārbaudiet, vai backend darbojas
Pārbaudiet sava backend pakalpojuma statusu:
sudo systemctl status php8.2-fpm
Aizstājiet php8.2-fpm ar jūsu faktisko PHP versiju vai backend pakalpojuma nosaukumu. Ja izvade norāda inactive (dead) vai failed, tā ir jūsu problēma. Restartējiet to:
sudo systemctl restart php8.2-fpm
Pēc tam vēlreiz pārbaudiet statusu, lai pārliecinātos, ka tas ir veiksmīgi palaists.
2. darbība. Pārbaudiet Nginx kļūdu žurnālu
Kļūdu žurnālā gandrīz vienmēr ir norādīts precīzi, kas nogāja greizi:
sudo tail -30 /var/log/nginx/error.log
Ja lietojat FASTPANEL®, žurnālus varat skatīt arī tieši tīmekļa saskarnē: atveriet vietnes karti, pārejiet uz sadaļu "Žurnāli" un pārbaudiet cilni "Frontend kļūdu žurnāls".
Šeit ir biežākās kļūdu ziņojumi un ko tie nozīmē:
connect() failed - Connection refused - backend pakalpojums nedarbojas. Restartējiet to, kā parādīts 1. darbībā.
connect() failed - No such file or directory - Nginx mēģina sasniegt Unix ligzdu, kas neeksistē. Pārbaudiet, vai ligzdas ceļš jūsu Nginx konfigurācijā atbilst tam, ko PHP-FPM faktiski izveido.
upstream sent too big header - backend atgrieza HTTP galvenes, kas ir pārāk lielas noklusējuma buferim. Pievienojiet šīs rindas savai Nginx vietnes konfigurācijai server bloka iekšpusē:
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. darbība. Pārbaudiet servera resursus
free -h
Ja sleja available rāda mazāk nekā 100-200 MB brīvas atmiņas, jūsu serverim, visticamāk, beidzas RAM. Pārbaudiet, kas to patērē:
ps aux --sort=-%mem | head -10
Ja atmiņas trūkums ir problēmas pamatā, tad ātrākais pagaidu risinājums ir swap faila pievienošana. Tomēr swap uz diska ir daudz lēnāks nekā RAM, un to nevajadzētu uzskatīt par pastāvīgu risinājumu. Ja jūsu serverim regulāri beidzas atmiņa, ir pienācis laiks optimizēt lietojumprogrammas vai jaunināt uz plānu ar vairāk RAM.
Noslēgums
502 Bad Gateway gandrīz vienmēr ir backend problēma – avarējis pakalpojums, izsmelti darbinieki vai nepietiekami daudz atmiņas. Pārbaudiet backend statusu, izlasiet Nginx kļūdu žurnālu un aplūkojiet resursu lietojumu. Vairumā gadījumu atbildi atradīsiet dažu minūšu laikā.
Ja nevēlaties ar to nodarboties pats, kodu.cloud mēs piedāvājam bezmaksas 24/7 diennakts tehnisko atbalstu ar katru VPS un dedicē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, izmantojot tīmekļa saskarni.