Nginx Linux (Nginx)

Nginx — после перезапуска служба теряет доступ к сокету

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

После перезапуска Nginx перестаёт подключаться к Unix-сокету приложения и возвращает 502; до перезапуска запросы работали. У Nginx и PHP-FPM разные сокеты и владельцы: перед исправлением определите, кто создаёт файл, кто к нему подключается и не исчез ли путь /run.

В этой статье
  1. Симптом и границы применимости
  2. Возможные причины и как их отличить
  3. Пошаговая диагностика и исправление
  4. Как проверить результат
  5. Если проблема не устранена

#Симптом и границы применимости

После перезапуска Nginx перестаёт подключаться к Unix-сокету приложения и возвращает 502; до перезапуска запросы работали. У Nginx и PHP-FPM разные сокеты и владельцы: перед исправлением определите, кто создаёт файл, кто к нему подключается и не исчез ли путь /run.

#Возможные причины и как их отличить

Возможная причинаКак узнатьЧто делать
Сокет ещё не созданПри загрузке FPM может стартовать позже или создать сокет с другим именем.В error_log connect() failed (2: No such file or directory)Сравнить пути fastcgi_pass и listen PHP-FPM
Нет прав на соединениеДоступ к сокету контролируется правами на сокет и доступом к родительскому каталогу.В журнале connect() failed (13: Permission denied)Проверить пользователя Nginx, владельца сокета и каталоги
Путь в временном каталоге исчезВременное файловое дерево очищается после перезагрузки.После перезагрузки отсутствует каталог внутри /runПроверить создание runtime-каталога и службу FPM

#Пошаговая диагностика и исправление

  1. Уточните точную ошибку 502Откройте SSH на том сервере, где работает Nginx. Запросите проблемный адрес, затем посмотрите последние строки error_log: в панели узнайте путь, а при обычной установке это часто /var/log/nginx/error.log. Различайте No such file и Permission denied — исправления у них разные.
  2. Пример пути для обычной установки; при иной конфигурации используйте путь из error_log
    Linux · Терминал (Bash)КомандаНужен sudo
    Пример пути для обычной установки; при иной конфигурации используйте путь из error_log.
    sudo tail -n 80 /var/log/nginx/error.log
  1. Узнайте, какой путь ожидает NginxВ полной конфигурации найдите fastcgi_pass unix:/… или proxy_pass http://unix:/… и выпишите полный путь. Посмотрите, не обращается ли часть location к другому пулу. Не заменяйте сокет на TCP без понимания прав и схемы доступа.
    Linux · Терминал (Bash)КомандаНужен sudo
    nginx -T показывает активные include; не распространяйте секреты из полного вывода.
    sudo nginx -T 2>&1 | grep -nE "fastcgi_pass|proxy_pass|error_log"
  1. Проверьте создателя сокетаСверьте путь с директивой listen конкретного PHP-FPM-пула. Название службы зависит от версии и панели, например php8.2-fpm или php8.5-fpm; не предполагайте одно имя. Проверьте сокеты, доступные в системе. Если путь отсутствует, сначала выясните состояние соответствующего FPM.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)КомандаНужен sudo
    Unix-сокеты выводятся в формате LISTEN; отсутствие процесса FPM — причина для диагностики его службы.
    sudo ss -xlpn | grep -E "php|fpm|nginx"
  1. Проверьте владельца и проход по каталогамНа SSH-сервере подставьте путь сокета из предыдущего шага. Команда namei показывает каждый каталог; ls -l — файл. Узнайте рабочую учётную запись Nginx по user в nginx -T или по процессам, а у FPM параметры listen.owner, listen.group и listen.mode. Не назначайте всем каталогам 777.
    Linux · Терминал (Bash)Команда
    Пример пути, замените фактическим; только чтение.
    namei -l /run/php/php8.2-fpm.sock; ls -l /run/php/php8.2-fpm.sock
  1. Восстановите правильное создание сокетаЕсли путь не совпадает, исправьте один параметр в конфигурации пула либо fastcgi_pass после резервной копии; если ошибка в правах, настройте listen.owner/listen.group/listen.mode согласно фактической группе процесса. Для несуществующего /run каталога проверьте RuntimeDirectory или tmpfiles.d службы, а не создавайте его вручную после каждой загрузки.
  1. Проверьте конфигурации и запускайте в зависимости от службыСначала проверьте тест Nginx. У PHP-FPM синтаксический тест запускается бинарником установленной версии (php-fpm8.2 -t — лишь пример). Перечитывание Nginx не исправляет отказ самого FPM: используйте систему управления службой соответствующей версии, когда подтверждены исправления.
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Команда не перезапускает FPM. Сохраните конфигурацию, подготовьте откат; изменение прав и пула влияет на приложения.
    sudo nginx -t && sudo systemctl reload nginx

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

#Как проверить результат

После перезапуска обеих соответствующих служб (в согласованное окно) проверьте существование сокета, права, HTTP-код проблемного URL и отсутствие новых connect() failed в error_log.

#Если проблема не устранена

Если сокет есть и доступен, но 502 сохраняется, изучите ошибки upstream prematurely closed connection и логи PHP-FPM; не меняйте права системных каталогов рекурсивно.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.