#Что означает и когда возникает ошибка
У HTTPS есть дополнительный этап выбора сертификата через SNI: неверный сертификат и неверный контент требуют отдельно проверить SSL-настройки, а не только Host. Подделанный Host нельзя принимать как доказательство нужного домена.
#Причины и как их различить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Нет точного server_nameВ конфигурации пропущен домен, его вариант www или допущена опечатка. | Для одного имени сайт правильный, для другого появляется стартовая страница. | Проверить имена и добавить только свои подтверждённые домены. |
| Запрос попал на другой IP/портA/AAAA-записи или балансировщик указывают не на тот входной адрес. | По IPv4 сайт верный, по IPv6 либо отдельному порту — другой. | Сверить DNS, listen IPv4/IPv6 и маршрутизацию внешнего прокси. |
| Активен не тот виртуальный серверФайл в conf.d не подключён, приоритет default_server другой либо конфигурация не перечитана. | Nginx -T не содержит ожидаемый server_name или указан другой порт. | Проверить include, reload после nginx -t. |
#Пошаговая диагностика и исправление
- Проверьте имя и адрес без изменения сервераВ браузере откройте оба адреса
https://example.com/иhttps://www.example.com/, подставив свой домен. Запишите, на каком появляется чужой сайт. На компьютере проверьте DNS черезnslookup example.com; если есть AAAA-запись, отдельно проверьте IPv6, когда сеть поддерживает его. Не меняйте DNS наугад: отложенное обновление записей может создавать временные различия. - Посмотрите фактическую конфигурациюНа сервере войдите по SSH и выполните
sudo nginx -T 2>&1 | grep -nE "server_name|listen |default_server|include ". Сверьтеlisten 80,listen 443 sslи IPv6-варианты с фактически задействованными адресами. Убедитесь, что нужный server_name находится в конфигурации, которую действительно читает работающий Nginx, а не только в файле панели хостинга. - Выберите виртуальный сервер для теста управляемым способомНа своём компьютере команда
curl --resolve example.com:443:203.0.113.10 -I https://example.com/проверит HTTPS на выбранном IP с правильными Host и SNI; адрес 203.0.113.10 является только примером из документационной сети, его обязательно замените действительным публичным IP вашего сервера. Не применяйте-k: проверка сертификата должна остаться включённой. Если сертификат ещё не настроен, зафиксируйте ошибку отдельно. - Исправьте server_name/слушающие адреса для собственного доменаЕсли в настройке отсутствует нужное имя, добавьте его в правильный server-блок и проверьте, что у него ожидаемые
rootлибоproxy_pass, а также отдельный сертификат для HTTPS. Не указывайте чужие домены, не используйтеserver_name _;как универсальное исправление. Помните:_— обычное имя, а сервер по умолчанию определяется параметромdefault_serverдля конкретногоlisten. - Проверьте DNS и внешний проксиЕсли запрос по --resolve приходит в нужный виртуальный сервер, но без него — нет, проверьте A и AAAA у авторитетного DNS, настройки CDN и адрес назначения у балансировщика. Для IPv6 должен существовать корректно настроенный
listen [::]:443 sslили другой подходящий IPv6 listener. Если сервер не должен обслуживать IPv6, корректируйте DNS только после проверки фактической архитектуры. - Безопасно примените и выполните обратную проверкуСохраните копию изменяемого файла, запустите
sudo nginx -t, затем при успехеsudo systemctl reload nginx. Откройте сайт по обоим именам и проверьте сертификат. Если появился другой сайт или неверный сертификат, верните копию и повторите тест/reload, прежде чем продолжать. Сопоставьте access.log нужного виртуального сервера с тестовым запросом. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Проверка результата
Проверка: по каждому назначенному домену открывается нужный сайт с правильным сертификатом, запрос на неверный Host не обслуживается неожиданным приватным приложением.
#Если проблема осталась
Сохраните дату, точный URL без паролей и токенов, код ответа, обезличенные строки error.log и access.log за это время и перечень уже сделанных изменений. Сравните работу при обращении через публичный адрес и через внутренний балансировщик, если он есть. Если причину пока не удалось подтвердить, восстановите исходную конфигурацию из копии и передайте эти сведения администратору или разработчику приложения; не меняйте несколько параметров одновременно.