Nginx Linux (Nginx)

Nginx — сервис работает с локального адреса, но недоступен из интернета

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

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

Если Nginx отвечает по localhost или внутреннему IP, но не открывается из интернета, сначала определите, в какой точке обрывается соединение. Локальный HTTP-код 200 не доказывает, что публичные DNS, маршруты, входящие порты и TLS исправны.

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

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

Если Nginx отвечает по localhost или внутреннему IP, но не открывается из интернета, сначала определите, в какой точке обрывается соединение. Локальный HTTP-код 200 не доказывает, что публичные DNS, маршруты, входящие порты и TLS исправны.

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

Возможная причинаКак узнатьЧто делать
Слушается только localhostПривязка к loopback недоступна внешним клиентам.ss показывает 127.0.0.1:80 или [::1]:443Сверить listen с требуемой схемой
Внешний порт закрыт или не проброшенТрафик может не доходить до процесса Nginx.curl снаружи выдаёт timeout, локально работаетПроверить firewall, NAT и облачную группу безопасности
DNS ведёт на чужой или старый адресПроверка localhost не касается внешнего адреса.A/AAAA не совпадают с маршрутизируемым узломСверить DNS, CDN и точку TLS

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

  1. Отличите отказ соединения, тайм-аут и ошибку сайтаС компьютера вне серверной сети откройте https://example.com. Если timeout — обычно пакет не достигает ответа; connection refused — на адресе никто не принимает соединение либо его активно отклоняют; HTTP 403/502 — соединение установлено и проблема на уровне веб-сервиса.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)Команда
    Клиентский терминал; -I заголовки, -v диагностика, --connect-timeout ограничивает ожидание.
    curl -Iv --connect-timeout 8 https://example.com/
  1. Сверьте публичный адресПроверьте A/AAAA в DNS. Если домен за CDN, публичные IP относятся к CDN, а не напрямую к серверу: важно проверить именно выбранную схему. Если домашний сервер за CGNAT, простой проброс порта на маршрутизаторе может не обеспечить входящий доступ.
  2. При отсутствии dig используйте nslookup; команды чтения
    Linux · Терминал (Bash)Команда
    При отсутствии dig используйте nslookup; команды чтения.
    dig +short A example.com; dig +short AAAA example.com
  1. Проверьте интерфейс и TCP-сокеты на сервереПодключитесь по SSH и посмотрите, на каких IP/портах слушает nginx. 127.0.0.1 означает доступ только с сервера, 0.0.0.0 — IPv4 на всех интерфейсах, [::] — IPv6. Прокси Apache может слушать снаружи, а Nginx — только локально, и это допустимая схема.
  2. Только чтение, не раскрывайте полный список адресов публично
    Linux · Терминал (Bash)КомандаНужен sudo
    Только чтение, не раскрывайте полный список адресов публично.
    ip -brief address; sudo ss -lntp | grep -E ":(80|443)[[:space:]]"
  1. Проверьте локальный запрос с нужным Host/SNIHTTP на 127.0.0.1 без Host может попасть в default_server и создать ложную картину. Для точного HTTPS-теста укажите имя и адрес через --resolve; если TLS терминируется на прокси, тестируйте правильный слой.
  2. Выполнить на самом сервере; замените домен, если Nginx действительно слушает loopback:443
    Linux · Терминал (Bash)Команда
    Выполнить на самом сервере; замените домен, если Nginx действительно слушает loopback:443.
    curl -Iv --resolve example.com:443:127.0.0.1 https://example.com/
  1. Сверьте правила сети без их выключенияПосмотрите действующие правила nftables и отдельную облачную группу безопасности, настройки маршрутизатора и провайдера. Открывайте только необходимый порт для заданного источника по политике безопасности. Не выполняйте команды отключения всего firewall.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)КомандаНужен sudo
    Если используется iptables/ufw/firewalld — смотрите правила в соответствующем средстве; команда чтения.
    sudo nft list ruleset
  1. Исправьте один доказанный барьерЕсли listen настроен неправильно, сохраните конфигурацию и исправьте привязку к нужному интерфейсу. Если блокировка в маршруте — исправьте порт или группу безопасности без перенастройки веб-сервера. После изменения Nginx выполните синтаксическую проверку и reload.
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Применять только если менялась конфигурация и синтаксическая проверка успешна.
    sudo nginx -t && sudo systemctl reload nginx

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

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

Из независимой внешней сети доступен сайт по имени и HTTPS, правильный сертификат, статус соответствует ожидаемому. Локальный доступ и соседние виртуальные хосты также работают.

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

Если пакеты не приходят до сервера, решайте задачу с сетевым администратором или провайдером. Если TCP доступен, но HTTP выдаёт ошибку, возвращайтесь к серверной конфигурации, а не к NAT.

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

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

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