Nginx Linux (Nginx)

Nginx — ошибка возникает только у пользователей IPv6

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

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

Если сайт открывается по IPv4, но не по IPv6, проверьте DNS-запись AAAA, прослушивание IPv6 на самом Nginx, доступность порта по IPv6 и сертификат. Ошибки на IPv6 и проблемы всего сайта нельзя смешивать.

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

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

Если сайт открывается по IPv4, но не по IPv6, проверьте DNS-запись AAAA, прослушивание IPv6 на самом Nginx, доступность порта по IPv6 и сертификат. Ошибки на IPv6 и проблемы всего сайта нельзя смешивать.

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

Возможная причинаКак узнатьЧто делать
AAAA ведёт не на тот серверКлиенты с IPv6 могут попадать на старый узел.dig AAAA показывает неизвестный IPv6Исправить адрес у владельца DNS после сверки с сервером
Нет IPv6-сокетаlisten 443 без IPv6-параметра не гарантирует требуемый IPv6-сокет.curl -6 не устанавливает соединение, ss не показывает [::]:443Проверить listen и наличие IPv6 на интерфейсе
Порт блокируется для IPv6Наличие правил IPv4 не означает такого же разрешения для IPv6.Локально -6 работает, из интернета -6 нетПроверить отдельные правила IPv6 firewall и провайдера

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

  1. Проверьте DNS с устройства клиентаВ терминале клиента выполните DNS-запросы для A и AAAA. AAAA отсутствует — браузер не должен выбирать IPv6 для этого домена; неверный AAAA — явная проблема. На Windows без dig используйте nslookup -type=AAAA example.com.
  2. Linux/macOS при наличии dig; домен заменить
    Linux · Терминал (Bash)Команда
    Linux/macOS при наличии dig; домен заменить. Команды ничего не меняют.
    dig +short A example.com; dig +short AAAA example.com
  1. Сравните запросы по двум семействам адресовНа компьютере с реальным IPv6-доступом вызовите curl принудительно с -4 и -6. Сравните, дошло ли соединение, HTTP-код, TLS-сообщение и время. Если у клиента IPv6 отсутствует, ошибка curl -6 ещё не доказывает проблему сервера.
    Linux · Терминал (Bash)Команда
    Параметры -4/-6 выбирают IP-протокол, -I запрашивает заголовки, -v выводит диагностику.
    curl -4 -Ivs https://example.com/; curl -6 -Ivs https://example.com/
  1. Проверьте IPv6-адрес сервера и портПодключитесь по SSH. Сначала ip -6 addr: есть ли глобальный адрес на сетевом интерфейсе; затем ss: слушается ли нужный порт по IPv6. Если сервер за балансировщиком или CDN, проверяйте входящую точку вместо origin.
  2. Команды чтения
    Linux · Терминал (Bash)КомандаНужен sudo
    Команды чтения. Адрес из диапазона fe80:: только локальный и не заменяет глобальный IPv6.
    ip -6 addr show; sudo ss -lntp | grep -E ":(80|443)[[:space:]]"
  1. Сверьте виртуальные серверы и сертификатВ действующем server-блоке проверьте listen [::]:443 ssl и server_name; наличие директивы зависит от вашей схемы. Проверьте, не попадает ли IPv6 в другой default_server и не выдаёт ли иной сертификат. Не добавляйте listen, пока системный IPv6 не настроен.
  2. Только чтение
    Linux · Терминал (Bash)КомандаНужен sudo
    Только чтение. Не публикуйте закрытые пути и конфиденциальный вывод.
    sudo nginx -t; sudo nginx -T 2>&1 | grep -nE "listen|server_name|ssl_certificate"
  1. Проверьте защиту и маршрутизациюУ администратора сервера проверьте IPv6-правила nftables/ip6tables, группы безопасности облака и маршрутизатор. Не отключайте защиту целиком. Если AAAA ведёт на неправильный узел, исправляйте DNS и дождитесь истечения TTL; не убирайте поддержку IPv6 без плана.
  1. Примените минимальную правкуЕсли действительно не хватало IPv6 listen, добавьте его в нужный виртуальный сервер после копии конфигурации; проверьте nginx -t и только тогда reload. Если входящие пакеты не доходят — исправляйте маршрутизацию у провайдера, а не Nginx.
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Работает на systemd; используйте собственный способ управления в контейнере/панели.
    sudo nginx -t && sudo systemctl reload nginx

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

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

Из внешней сети с IPv6 повторите curl -6 и откройте HTTPS без предупреждения сертификата. Сравните ответ IPv4 и IPv6 для того же имени, коды, заголовки и журнал нужного виртуального хоста.

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

Если curl -6 не проходит даже на уровне соединения, приложите администратору AAAA, вывод ss и проверку маршрута. Если TLS проходит, но отличается страница — ищите неправильный server_name/IPv6 default_server.

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

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

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