Почему вместо сайта открывается заглушка сервера

Заглушка появляется, когда запрос доходит до сервера, но веб-сервер не находит виртуальный хост, который должен его обработать. Тогда он отдаёт страницу «по умолчанию»: приветствие nginx или Apache либо шаблон хостинга. Обычно причин три. Домен направлен на сервер, где сайта с таким именем нет. Посетитель заходит по HTTPS, а SSL-сертификат не установлен. Или у домена есть AAAA-запись, а сайт работает только по IPv4.

Как сервер решает, какой сайт показать

На одном IP-адресе часто размещены десятки сайтов. Сервер различает их по заголовку Host в HTTP-запросе, а при HTTPS по полю SNI. Это имя он сравнивает со списком доменов в конфигурации, например с директивой server_name в nginx или ServerName и ServerAlias в Apache. Если совпадения нет, запрос уходит в блок default_server. Там и лежит заглушка.

Отсюда частая ошибка: A-запись в DNS уже указывает на новый сервер, а сайт в панели хостинга ещё не создан или создан под другим именем. Так бывает и с версией «с www». Домен добавлен без неё, поэтому www.example.ru попадает в общий блок. Похожая картина возникает при переезде любого проекта, от блога до страницы производителя, где описан Забор Еврожалюзи. Пока DNS и настройки сервера не совпадут, часть посетителей видит пустой шаблон вместо содержимого.

Признаки и причины: сводная таблица

Что видно в браузере Вероятная причина Чем проверить
«Welcome to nginx!» или «Apache2 Default Page» по HTTP Домен указывает на сервер, но сайта с таким именем там нет dig A example.ru, затем список доменов в панели или в server_name
Сайт по HTTP открывается, по HTTPS заглушка или предупреждение о сертификате SSL-сертификат для домена не установлен openssl s_client -connect example.ru:443 -servername example.ru
У одних пользователей сайт работает, у других (часто в мобильной сети) заглушка Есть AAAA-запись, а сайт настроен только на IPv4 dig AAAA example.ru, curl -6 -I https://example.ru
Без www сайт открывается, с www заглушка Не добавлен псевдоним (алиас) www curl -I http://www.example.ru
После смены DNS у части людей старый сайт, у части заглушка Кеш DNS ещё не обновился (зависит от TTL записи) dig example.ru @8.8.8.8 и сравнение с NS-серверами домена

Почему HTTPS и IPv6 дают заглушку, даже если сайт настроен

С HTTPS ловушка неочевидная. Сайт может быть описан для порта 80, а для 443 блока с этим доменом нет. Тогда защищённое соединение принимает первый попавшийся HTTPS-хост на сервере. Браузер получает чужой сертификат или самоподписанный сертификат хостинга и показывает ошибку. Если пользователь её пропустит, откроется заглушка. Ситуация обостряется, когда браузер сам переводит адрес на HTTPS, например из-за ранее полученного заголовка HSTS.

С IPv6 логика та же, только на уровне адресов. Многие регистраторы и DNS-хостинги добавляют AAAA-запись автоматически. Клиент с поддержкой IPv6 предпочитает её, и его запрос приходит на IPv6-адрес сервера. Если виртуальный хост слушает только IPv4 (в nginx есть listen 80;, но нет listen [::]:80;), ответит хост по умолчанию. Поэтому проблема «плавающая»: у владельца сайта всё работает, а посетители жалуются.

Что делать, если вместо сайта открывается заглушка

  1. Сравните адреса. Выполните dig A и dig AAAA для домена и сверьте результат с IP, который выдал хостинг. Лишнюю или устаревшую AAAA-запись удалите либо настройте сайт на работу по IPv6.
  2. Проверьте, что домен добавлен на сервер. В панели хостинга должен быть сайт с точным именем домена. Версию с www укажите как алиас, иначе она так и будет показывать заглушку.
  3. Посмотрите конфигурацию веб-сервера. В nginx команда nginx -T | grep server_name покажет все имена, в Apache то же покажет apachectl -S. После правок проверьте синтаксис (nginx -t) и перезагрузите конфигурацию.
  4. Выпустите и подключите SSL-сертификат именно для этого домена и его www-версии. Убедитесь, что блок для порта 443 существует, а не только для 80.
  5. Если DNS меняли недавно, подождите, пока истечёт TTL старой записи. Пока ждёте, проверьте сайт через curl —resolve example.ru:443:IP https://example.ru: так видно, готов ли сервер, без учёта кеша.
  6. Очистите локальный кеш DNS и кеш браузера, затем откройте сайт в режиме инкогнито. Иначе можно принять за ошибку то, что уже исправлено.
➤