SystemdDoctor
служба не работает nginx php частое

nginx 502 Bad Gateway: connect() failed к приложению

Ошибка 502 означает, что nginx сам работает, но не смог получить ответ от приложения. В журнале nginx при этом есть строка с уровнем error, где написано, что именно не удалось: отказ соединения, отсутствующий сокет или отказ в доступе к нему.

Что это значит

Разбор идёт по тексту в скобках. (111: Connection refused) — приложение не слушает адрес. (2: No such file or directory) — указан unix-сокет, которого нет. (13: Permission denied) — сокет есть, но nginx не имеет права в него писать.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Приложение не запущено или упало

    Самая частая причина. nginx продолжает работать и отдаёт 502 на каждый запрос.

  2. Путь к сокету не совпадает

    После обновления PHP имя сокета меняется вместе с версией (php8.1-fpm.sock против php8.3-fpm.sock), а в конфигурации nginx остаётся прежнее.

  3. Нет прав на запись в сокет

    Владелец и права сокета задаются в описании пула php-fpm. Пользователь nginx должен иметь доступ — обычно через общую группу.

  4. Приложение не успевает ответить

    Если ответ идёт дольше proxy_read_timeout или fastcgi_read_timeout, nginx прерывает ожидание. В журнале при этом будет «upstream timed out».

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Строка с причиной: текст в скобках определяет дальнейший разбор.

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

Существует ли сокет приложения и по какому пути.

sudo ss -xln | grep -E "php|gunicorn|uwsgi"

Куда nginx пытается обращаться по итоговой конфигурации.

sudo nginx -T 2>/dev/null | grep -E "proxy_pass|fastcgi_pass"

Состояние службы приложения.

systemctl status php8.3-fpm --no-pager | head -8

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Приложение не запущено или упало
Почему происходит
Самая частая причина. nginx продолжает работать и отдаёт 502 на каждый запрос.
Как проверить
Посмотрите состояние службы приложения.
systemctl status php8.3-fpm --no-pager | head -8
sudo ss -xln | grep php
Как исправить
Запустите приложение и разберитесь с причиной его падения: 502 тут лишь симптом.
2. Путь к сокету не совпадает
Почему происходит
После обновления PHP имя сокета меняется вместе с версией (php8.1-fpm.sock против php8.3-fpm.sock), а в конфигурации nginx остаётся прежнее.
Как проверить
Сравните путь в nginx и фактический сокет.
sudo nginx -T 2>/dev/null | grep fastcgi_pass
sudo ss -xln | grep php
Как исправить
Приведите путь в конфигурации nginx к фактическому и перезагрузите настройки.
sudo nginx -t && sudo systemctl reload nginx
3. Нет прав на запись в сокет
Почему происходит
Владелец и права сокета задаются в описании пула php-fpm. Пользователь nginx должен иметь доступ — обычно через общую группу.
Как проверить
Проверьте доступ от пользователя nginx.
sudo -u www-data test -w /run/php/php8.3-fpm.sock && echo доступ есть || echo отказ
ls -l /run/php/
Как исправить
Задайте в описании пула listen.owner и listen.group соответственно пользователю веб-сервера и перезапустите php-fpm.
4. Приложение не успевает ответить
Почему происходит
Если ответ идёт дольше proxy_read_timeout или fastcgi_read_timeout, nginx прерывает ожидание. В журнале при этом будет «upstream timed out».
Как проверить
Поищите строки про таймаут.
sudo tail -50 /var/log/nginx/error.log | grep -i timeout
Как исправить
Ускорьте приложение или поднимите таймаут осознанно: он защищает nginx от накопления зависших запросов.

Пример вывода

nginx не может подключиться к сокету php-fpm. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

2026/09/15 14:22:03 [crit] 1120#1120: *8 connect() to unix:/run/php/php8.1-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: <адрес>, server: example.org, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/run/php/php8.1-fpm.sock:"

● php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager
     Active: active (running) since Mon 2026-09-15 08:00:01 MSK; 6h ago

Служба работает, но версия в пути другая: nginx ищет сокет 8.1, а работает 8.3. Это самый частый вид 502 после обновления PHP.

Связанные ошибки

Где встречается чаще всего

Источники

  • Документация nginx: модуль proxy и таймауты документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено остановкой php-fpm и подменой версии в пути сокета.
    собственная проверка, systemd 255
    сверено 15 сентября 2026