Прескочи на садржај
EVI Solutions

Nginx 502 Бад Gateway: како да вратите сајт у рад

Средње 15 мин Ažurirano:

Кратак одговор

Грешка 502 Бад Gateway значи да Nginx не може да добије исправан одговор од бацкенд сервиса (PHP-FPM, Node.js, Гуницорн). Проверите да ли бацкенд процес ради, да ли су сокети и портови доступни и да ли су логови пуни грешака. У већини случајева решење је рестарт бацкенд сервиса или исправка конфигурације.

Како се проблем препознаје

  • Сајт приказује белу страницу са текстом 502 Бад Gateway
  • Неке странице раде, а динамичке (PHP, API) враћају 502
  • У еррор логу Nginx-a појављује се цоннецт() фаилед
  • Бацкенд сервис (PHP-FPM, Node) је пао или се рестартује
  • 502 се појављује повремено, посебно под оптерећењем

Најчешћи узроци

Бацкенд сервис не ради

PHP-FPM, Node.js, Гуницорн или други апликативни server је пао или је заустављен. Nginx тада нема коме да проследи захтев.

Погрешан сокет или порт у конфигурацији

Nginx упућује на непостојећи Unix сокет или порт на којем бацкенд не слуша. До грешке долази и после промене конфигурације или надоградње.

Преоптерећен бацкенд

Ако PHP-FPM или апликација потроше све ресурсе, не могу да прихвате нове захтеве. Nginx тада враћа 502 или 504.

Дозволе над сокетом

Nginx корисник (нпр. www-data или nginx) нема право приступа Unix сокету. То се често дешава после промене власника или SELinux политике.

Бацкенд се руши због грешке у коду

Фатална грешка у апликацији може да обори радни процес. У логовима се види сегфаулт или PHP Фатал еррор.

Решење корак по корак

  1. 1

    Проверите статус бацкенд сервиса

    Покрените systemctl status php8.2-fpm (или одговарајући сервис: php-fpm, node, gunicorn). Ако је сервис неактиван, покушајте systemctl restart php8.2-fpm. Ако се одмах поново заустави, пређите на читање логова.

  2. 2

    Прегледајте Nginx еррор лог

    Отворите /var/log/nginx/error.log (или путању из nginx -T). Тражите линије са connect() failed или no live upstreams. Оне показују да ли Nginx не може да се повеже на сокет или порт.

  3. 3

    Проверите да ли бацкенд слуша

    За Unix сокет: ls -l /run/php/php8.2-fpm.sock. За TCP порт: ss -tlnp | grep 3000. Ако нема излаза, бацкенд не слуша и проблем је у његовој конфигурацији или старту.

  4. 4

    Ускладите путању у Nginx конфигурацији

    У фајлу сајта (нпр. /etc/nginx/sites-enabled/example.conf) проверите fastcgi_pass или proxy_pass. Путања сокета или порт мора да одговара ономе што бацкенд заиста користи. После измене покрените nginx -t па systemctl reload nginx.

  5. 5

    Проверите дозволе над сокетом

    Сокет треба да буде власништво корисника под којим ради бацкенд, а Nginx корисник мора да има приступ. По потреби подесите дозволе (нпр. chmod 660 и одговарајућу групу) и рестартујте оба сервиса.

  6. 6

    Пратите логове апликације

    Погледајте PHP еррор лог (/var/log/php8.2-fpm.log), journalctl -u php8.2-fpm -n 50 или лог апликације. Ако видите фаталне грешке, исправите код или конфигурацију пре даљег рестартовања.

  7. 7

    Тестирајте приступ локално на серверу

    Са сервера покрените curl -I -H 'Host: example.com' http://127.0.0.1 и curl -I http://127.0.0.1:3000 (ако апликација слуша на том порту). Ако локално ради а споља не, проблем је у мрежи, firewall-u или Nginx конфигурацији.

  8. 8

    Рестартујте сервисе по реду

    Прво рестартујте бацкенд (systemctl restart php8.2-fpm), па Nginx (systemctl restart nginx). Затим поново учитајте сајт. Ако 502 и даље постоји, вратите се на логове.

Ако ништа не помогне

Ако су сервиси активни, сокети доступни и логови без очигледне грешке, проверите да ли је проблем у мрежи или SELinux-u. Команда getenforce показује да ли је SELinux у режиму Енфорцинг; привремено га можете поставити у Permissive (setenforce 0) ради теста, али га обавезно вратите у Енфорцинг (setenforce 1). Такође проверите да ли је диск пун (df -h) и да ли има довољно меморије (free -m). Ако се 502 јавља само под оптерећењем, повећајте број PHP-FPM процеса или worker_connections у Nginx-u. За продукционо окружење размотрите мониторинг који ће вас обавестити пре него што корисници примете грешку.

Како да спречите да се понови

  • Редовно пратите рад бацкенд сервиса и поставите аларм за пад
  • Држите Nginx и PHP-FPM конфигурацију усклађену са стварним сокетима
  • Пратите потрошњу ресурса и повећајте лимите на време
  • Тестирајте измене конфигурације са `nginx -t` пре релоад-а

Када је боље позвати стручњака

Ако се грешка понавља и захтева измене у конфигурацији или коду, или ако немате приступ логовима и root дозволама, боље је да позовете IT подршку. Они могу брзо да изолују узрок и спрече дужи прекид рада сајта.

Одржавање IT инфраструктуре · Сервери, мреже, backup, безбедност и хелпдеск

Честа питања

Да ли је 502 исто што и 504?

Није. 502 значи да је бацкенд вратио неисправан одговор или да Nginx није могао да се повеже, док 504 значи да је бацкенд предуго ћутао. У пракси се често решавају слично, провером бацкенд сервиса и логова.

Зашто се 502 јавља само на неким страницама?

Статичне фајлове Nginx сервира директно, па раде. Динамичке странице зависе од бацкенд-а, па оне пријављују 502. То потврђује да је проблем у апликативном серверу, а не у Nginx-u.

Могу ли да рестартујем само PHP-FPM?

Да, ако је проблем у PHP-FPM-у, довољан је `systemctl restart php8.2-fpm`. Nginx рестартујте само ако сте мењали његову конфигурацију или ако проблем и даље траје.

Подели
Нисте нашли решење?AI IT асистент је доступан 24/7. Опишите проблем или пошаљите screenshot грешке и добићете упутство за ваш случај.Питајте AI IT асистента