Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Nginx Error 502: Bad Gateway (connect() to unix:/var/run/php-fpm.sock failed: Permission denied) Linux / DevOps

Nginx 502 Bad Gateway: php-fpm.sock Permission denied — Исправление

Обновлено: 18.08.2026  ·  Официальная база знаний

Nginx не может передать FastCGI-запрос пулу PHP-FPM через UNIX-сокет. Пользователь видит ошибку 502 Bad Gateway, а в /var/log/nginx/error.log записывается: connect() to unix:/var/run/php/php-fpm.sock failed (13: Permission denied) while connecting to upstream.

Пользователь NginxВладелец сокета PHP-FPMРезультат доступа
www-data (или nginx)root:root (0600)13: Permission denied
nginxapache:apache (0660)Отказ доступа (несовпадение групп)
www-datawww-data:www-data (0660)Успешное соединение (OK)
  • Служба php-fpm.service работает, сокет-файл физически существует на диске.
  • При смене прав на chmod 777 /var/run/php/php-fpm.sock проблема исчезает, но возвращается после рестарта PHP-FPM.
  1. Проверьте текущие права и владельца сокет-файла:
    ls -la /var/run/php/php*-fpm.sock
    # Или /run/php-fpm/www.sock
  2. Определите системного пользователя, под которым работает воркер Nginx:
    ps aux | grep nginx | grep worker
  3. Отредактируйте пул конфигурации PHP-FPM (обычно /etc/php/8.x/fpm/pool.d/www.conf или /etc/php-fpm.d/www.conf):
    sudo nano /etc/php/8.2/fpm/pool.d/www.conf
    
    # Раскомментируйте и установите правильного пользователя и группу:
    listen.owner = www-data
    listen.group = www-data
    listen.mode = 0660
  4. Если пользователи веб-сервера и PHP отличаются (например, nginx и php-fpm), добавьте пользователя Nginx в группу PHP-FPM:
    sudo usermod -aG php-fpm nginx
    # Или настройте POSIX ACL на директорию сокетов:
    sudo setfacl -m u:nginx:rw /var/run/php/php-fpm.sock
  5. Перезапустите службы PHP-FPM и Nginx:
    sudo systemctl restart php8.2-fpm
    sudo systemctl restart nginx
Внимание: Никогда не выставляйте listen.mode = 0777 в production-средах, так как это нарушает изоляцию процессов и позволяет любому локальному пользователю системы перехватывать входящий веб-трафик.
Практический опыт инженера: В CentOS/RHEL Nginx по умолчанию работает от пользователя `nginx`, а PHP-FPM — от `apache`. Это главный источник ошибки 13 Permission Denied при дефолтной установке.

Частые вопросы (FAQ)

Почему права на сокет сбрасываются после перезапуска PHP-FPM?

При каждом перезапуске демон PHP-FPM пересоздает файл сокета заново, применяя права и владельца, жестко прописанные в директивах listen.owner, listen.group и listen.mode в файле www.conf.

Что быстрее: UNIX-сокет или TCP-порт (127.0.0.1:9000)?

UNIX-сокеты работают быстрее на 15-25% за счет отсутствия оверхеда на сетевой стек TCP/IP, вычисление контрольных сумм и буферизацию пакетов внутри ядра.

Как проверить синтаксис конфига PHP-FPM без перезапуска?

Выполните команду php-fpm8.2 -t (укажите вашу версию PHP).

Влияет ли SELinux на доступ к UNIX-сокетам?

Да, если сокет создан в нетипичном каталоге (/tmp вместо /run/php-fpm), SELinux заблокирует вызов connect().