Nginx Linux (Nginx)

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

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

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

systemctl сообщает active (running), но на ожидаемом TCP-порту 80, 443 или нестандартном порту нет слушателя. Это не одно и то же, что блокировка доступа извне: сначала нужно проверить локальный сокет.

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

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

systemctl сообщает active (running), но на ожидаемом TCP-порту 80, 443 или нестандартном порту нет слушателя. Это не одно и то же, что блокировка доступа извне: сначала нужно проверить локальный сокет.

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

Возможная причинаКак узнатьЧто делать
В конфигурации нет нужного listenNginx открывает только сокеты, перечисленные в действующей конфигурации.В nginx -T отсутствует ожидаемый адрес:портУточнить server-блок и добавить нужный listen после резервной копии
Проверяется не тот экземплярПанель хостинга или контейнер может запускать отдельный экземпляр.systemctl показывает одно имя службы, а nginx -T читает другой файлСверить бинарный файл и параметры запуска
Nginx слушает только loopback/IPv6Сокет на 127.0.0.1 доступен только локально.ss показывает 127.0.0.1 или [::1], но не внешний адресСопоставить адрес прослушивания с целью

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

  1. Определите ожидаемый портИз панели хостинга, файла конфигурации или технического задания узнайте, где должен работать сайт: 80, 443, 8080 и на каком IP. Не считайте порт 443 обязательным, если TLS завершает внешний балансировщик. Запишите текущий адрес и порт.
  1. Проверьте статус и сокетыОткройте SSH-терминал сервера. Первая команда показывает состояние службы; вторая — TCP-сокеты в режиме LISTEN. В строках ищите :80 или :443 и имя nginx. Пустой ответ у grep — отсутствие найденной строки, а не доказательство неисправности всего сервера.
  2. Только чтение
    Linux · Терминал (Bash)КомандаНужен sudo
    Только чтение. На системах без systemd используйте штатный менеджер службы.
    sudo systemctl status nginx --no-pager
    sudo ss -lntp
  1. Проверьте действующие директивы listenВыполните проверку конфигурации и распечатайте активные server-блоки. В nginx -T учитываются включаемые файлы; путь к ним бывает не только /etc/nginx/sites-enabled. Проверьте, что нужный listen относится именно к server_name домена, а не расположен в закомментированном файле.
    Linux · Терминал (Bash)КомандаНужен sudo
    Команда чтения может вывести фрагменты закрытой конфигурации; не публикуйте полный вывод.
    sudo nginx -t
    sudo nginx -T 2>&1 | grep -nE "listen |server_name"
  1. Исключите занятый порт и ошибку запускаЕсли порт занят другой программой, ss покажет имя процесса. Не завершайте неизвестный процесс. Посмотрите журнал запуска: сообщения bind() failed указывают на конфликт или отсутствие адреса в системе; permission denied — на права или ограничения окружения. Сопоставьте время ошибки с перезапуском.
  2. Среда: Linux с systemd
    Linux · Терминал (Bash)КомандаНужен sudo
    Среда: Linux с systemd. Только чтение.
    sudo journalctl -u nginx -n 60 --no-pager
  1. Исправьте конкретную причинуЕсли listen указан как 127.0.0.1:8080, а нужен внешний доступ, меняйте директиву только после проверки firewall и схемы прокси. Если Nginx запущен в контейнере, проверьте публикацию порта контейнера: изменение listen в контейнере не публикует порт на хосте. Сохраните изменяемый файл, выполните nginx -t, затем reload.
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Не выполняйте reload, пока проверка не успешна. При ошибке верните сохранённый файл.
    sudo nginx -t && sudo systemctl reload nginx

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

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

Повторите ss -lntp и curl -I http://127.0.0.1:ПОРТ/ для HTTP либо curl -Ik https://127.0.0.1:ПОРТ/ для TLS (параметр -k только диагностический). Если сокет есть локально, но извне недоступен, рассматривайте брандмауэр, NAT и группы безопасности отдельно.

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

Если nginx -t успешен, но сокета нет, проверьте реальные ExecStart и конфигурацию запущенного процесса, а также контейнер/панель. Не открывайте внешний порт, пока не подтверждено, что сервис предназначен для публичного доступа.

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

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

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