Nginx Linux

Nginx: connect() failed (111: Connection refused) while connecting to upstream

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

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

Бэкенд не принимает соединения: служба не запущена, неверный адрес или порт, либо сокет недоступен. Запустите PHP-FPM или приложение и проверьте адрес в fastcgi_pass/proxy_pass.

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

#Что означает ошибка

Сообщение
connect() failed (111: Connection refused) while connecting to upstream

«connect() failed (111: Connection refused) while connecting to upstream» в журнале nginx означает, что бэкенд (PHP-FPM, Node, Gunicorn) не принимает подключения на указанном адресе. Посетитель видит 502 Bad Gateway.

Надо выяснить, почему бэкенд не слушает порт или сокет.

Начните с состояния службы.

Бэкенд не принимает соединения: служба не запущена, неверный адрес или порт, либо сокет недоступен. Запустите PHP-FPM или приложение и проверьте адрес в fastcgi_pass/proxy_pass.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Служба не запущенаPHP-FPM.502.Запустите.
Неверный адрес/сокетКонфиг.Нет соединения.Исправьте.
Права на сокетСокет.Permission denied.Исправьте.
ФайрволПорты.Блокировка.Проверьте.

#Пошаговое решение

  1. Проверьте статус бэкендаИз строки connect() failed (111: Connection refused) while connecting to upstream в /var/log/nginx/error.log выпишите точный адрес и порт либо UNIX-сокет. Это означает, что соединение с backend было отвергнуто; увеличение proxy_read_timeout обычно не помогает.
  2. Проверьте порт или сокетПроверьте реальную службу backend через systemctl status имя.service и журнал journalctl -u имя.service -n 50 --no-pager. Если служба не запущена, найдите причину её падения: неверную конфигурацию, занятый порт, отсутствие прав или OOM. Запускайте только после понимания ошибки.
    Linux · Терминал (Bash)КомандаНужен sudo
    Статус службы PHP-FPM (имя может отличаться: php8.2-fpm).
    systemctl status php-fpm
  3. Сверьте fastcgi_pass и listenСравните фактические сокеты/порты в sudo ss -ltnp и sudo ss -lxnp с proxy_pass/fastcgi_pass в sudo nginx -T. Например, Nginx может обращаться к устаревшему сокету предыдущей версии PHP-FPM. Исправьте только виртуальный хост нужного сайта, не меняйте весь сервер.
  4. Проверьте права на сокетЕсли backend использует UNIX-сокет, проверьте его реальное расположение, владельца и доступ Nginx (ls -l и namei -l). Connection refused отличается от Permission denied; массовый chmod 777 не нужен, а незапущенная служба может оставлять старый сокет.
  5. Изучите логи PHP-FPMПосле устранения ошибки в журнале PHP-FPM проверьте конфигурацию нужной версии (php-fpm -t с правильным бинарным файлом), затем примените nginx -t при изменении Nginx. Откройте исходный URL и сравните состояние backend, прежде чем считать проблему решённой.

#Проверка службы

systemctl status php8.2-fpm (или gunicorn, node). Перезапустите: sudo systemctl restart php8.2-fpm. Проверьте, что она слушает: ss -tlnp | grep 9000 или файл сокета ls -l /run/php/php8.2-fpm.sock.

#Совпадение адресов

В nginx fastcgi_pass unix:/run/php/php8.2-fpm.sock; должен совпадать с listen в /etc/php/8.2/fpm/pool.d/www.conf. Права на сокет: listen.owner = www-data, listen.group = www-data. Для TCP: 127.0.0.1:9000 в обоих файлах. Для Docker используйте имя сервиса, а не localhost.

#Причины падения

Проверьте логи PHP-FPM /var/log/php8.2-fpm.log и dmesg | grep -i kill (OOM). Увеличьте память, pm.max_children. Проверьте SELinux (setsebool -P httpd_can_network_connect 1). Проверьте брандмауэр между контейнерами.

Linux · Терминал (Bash)КомандаНужен sudo
Диагностика связи nginx с PHP-FPM.
systemctl status php8.2-fpm
ss -tlnp | grep -E "9000|php"
ls -l /run/php/
sudo nginx -t

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

После исправления запросите страницу и посмотрите заголовки: curl -I https://example.com. Код 200 говорит о том, что бэкенд ответил. Проверьте журнал tail -f /var/log/nginx/error.log во время нескольких запросов — записей 111 быть не должно. Проверка напрямую: curl -v http://127.0.0.1:3000 для Node или cgi-fcgi -bind -connect 127.0.0.1:9000 для PHP-FPM. Если ошибка появляется при нагрузке, а не сразу, ищите нехватку памяти (dmesg | grep -i oom) и увеличивайте лимиты воркеров.

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

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

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