Вопрос или проблема
Хорошо, у меня есть 5 страниц:
- login.html
- otp.html
- billing.html
- index.html (для целей отладки)
- page-not-found.html
Предполагаемая логика
- Введите в браузер:
sub.domain.com/path (например, sub.domain.com/login)
- Служит с:
https://sub.domain.com/path.html (например, https://sub.domain.com/login.html)
Все это работало, и теперь, по какой-то причине, это меня сбивает с толка – всё возвращает ERR_NAME_NOT_RESOLVED – это любая комбинация, которую я протестировал, т.е. /login /login.html /
Я трижды проверил записи DNS для домена (sub.domain.com), все они указывают на IP веб-сервера.
Примечание: Навигация по IP-адресу сервера загружает страницу!? Проблема с DNS? Я только что выполнил ipconfig /flushdns – то же самое.. сброс кеша браузера – то же самое
Записи DNS для домена выглядят следующим образом (если это имеет отношение):
Таблица записей DNS от хостинга домена6
Файл NGINX (/etc/nginx/sites-enabled/website.conf)
server {
server_name sub.domain.com;
root /var/www/html/sub-domain;
index login.html; # добавлено просто, чтобы увидеть, загрузится ли - не загрузилось
# ранее было /login.html
# изменено для тестирования
location / {
try_files $uri $uri.html page-not-found; # ранее было /page-not-found - изменено для тестирования
}
location /page-not-found {
try_files $uri.html =404;
}
error_page 404 /custom_404.html;
location = /custom_404.html {
root /usr/share/nginx.html;
internal;
}
listen [::]:443 ssl ipv6only=on; # управляется Certbot
listen 443 ssl; # управляется Certbot
ssl_certificate /etc/letsencrypt/live/sub.domain.com/fullchain.pem; # управляется Certbot
ssl_certificate_key /etc/letsencrypt/live/sub.domain.com/privkey.pem; # управляется Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # управляется Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # управляется Certbot
}
server {
if ($host = sub.domain.com) {
return 301 https://$host$request_uri;
} # управляется Certbot
listen 80;
listen [::]:80;
server_name sub.domain.com;
return 404; # управляется Certbot
}
Ответ или решение
Проблемы с DNS и ERR_NAME_NOT_RESOLVED на сервере NGINX
Обзор проблемы
Ваши страницы, расположенные по адресу sub.domain.com
, перестали загружаться, и браузер выдает ошибку ERR_NAME_NOT_RESOLVED
. При этом, прямой доступ к серверу по IP-адресу работает, что указывает на проблему с DNS. Вы упомянули, что проверили DNS-записи и сделали очистку кэша DNS на локальном компьютере, однако проблема сохраняется.
Шаги диагностики проблемы
-
Проверка DNS-записей:
Убедитесь, что A-запись дляsub.domain.com
действительно указывает на IP-адрес вашего сервера. Используйте утилиты командной строки, такие какdig
илиnslookup
, чтобы подтвердить, что запись корректно разрешается:dig sub.domain.com
или
nslookup sub.domain.com
-
Время обновления DNS:
Проверьте TTL (Time To Live) ваших DNS-записей. Если TTL высок (например, 24 часа), изменения могут занять некоторое время для распространения. Если вы не видите последние изменения, возможно, стоит подождать или использовать другой DNS-сервер. -
Проверка конфигурации NGINX:
Просмотрите вашу конфигурацию NGINX, чтобы убедиться, что все расставлено корректно. В вашем файле конфигурации есть несколько моментов, которые стоит уточнить:- Запись
server_name sub.domain.com;
кажется корректной, но стоит добавить и точное совпадение сwww.sub.domain.com
, если планируете использовать его. - Проверьте правильность указания путей в
root
иtry_files
. Например, если ваш файлlogin.html
находится в корне/var/www/html/sub-domain
, тогда структура должна быть:location / { try_files $uri $uri.html /page-not-found.html; }
- Убедитесь, что файл
/var/www/html/sub-domain/page-not-found.html
существует, чтобы избежать ошибки 404.
- Запись
-
SSL-сертификаты:
Если тут всё настроено корректно, то при использовании HTTPS ваши сертификаты (Let’s Encrypt) должны быть актуальны. Проверьте их срок действия с помощью командной строки:sudo certbot certificates
-
Проверка локального кэша DNS:
Если вы уже попробовалиipconfig /flushdns
, то стоит еще проверить настройки локального файрвола или DNS-серверов, которые вы используете в своих сетевых настройках. Использование публичных DNS (например, Google DNS 8.8.8.8 и 8.8.4.4) может помочь временно. -
Проверка состояния NGINX:
Убедитесь, что ваш сервер NGINX работает без ошибок. Выполните команды:sudo systemctl status nginx sudo nginx -t
Первой полученная команда покажет, работает ли NGINX, а вторая проверит синтаксические ошибки в конфигурации.
Потенциальные решения
- Если DNS-записи корректные, но ошибка продолжается, попробуйте изменить DNS-серверы на вашем устройстве.
- Проверьте файл hosts на своем локальном компьютере, чтобы убедиться, что там нет некорректных записей.
- Попробуйте перезапустить маршрутизатор, так как иногда это может сбрасывать кэш DNS.
Заключение
Ошибки типа ERR_NAME_NOT_RESOLVED
часто возникают из-за неправильных настроек DNS или кэширования. Следуя описанным шагам, вы сможете диагностировать и, надеемся, исправить проблему. Убедитесь также, что все изменения в конфигурациях применены, а NGINX перезапущен после каждого изменения. Если проблема не разрешается, стоит обратиться к администратору DNS или вашему провайдеру хостинга.