
Chrome показывает «Не удается получить доступ к сайту» как минимум при шести разных сбоях, и у них нет почти ничего общего, кроме порядка, в котором они происходят. Один означает, что имени не существует. Один означает, что машина ответила и тут же оборвала соединение. Один означает, что у посетителя отвалился wifi.
Фраза одна и та же, потому что это единственное, что браузер может честно сказать о странице, которую он так и не получил. Различает их мелкий серый код под фразой, и в этом коде заключён весь диагноз.
Порядок, в котором это происходит
Загрузка страницы проходит через четыре этапа, и у каждого свой способ сломаться. Читать коды именно в этом порядке и значит понимать их смысл.
1. Найти адрес. Браузер спрашивает у резолвера, на какой IP указывает имя хоста.
2. Открыть соединение. Браузер пытается достучаться до этого IP на этом порту.
3. Защитить его. Для HTTPS браузер проверяет сертификат.
4. Запросить страницу. Браузер отправляет запрос и ждёт ответа.
Сбой на первом этапе не может быть виной вашего сервера, потому что до него ещё ничего не дошло. Сбой на четвёртом этапе почти наверняка виной сервера и есть. Код говорит, до какого этапа дело дошло, и это ценнее любого подробного описания симптомов.
Коды по порядку
DNS_PROBE_FINISHED_NXDOMAIN и ERR_NAME_NOT_RESOLVED относятся к первому этапу.
Собственное описание второго кода в Chromium звучит так: «Не удалось определить имя хоста». С
точки зрения ответившего резолвера такого имени просто не существует. Рядом стоит более
конкретный код ERR_NAME_RESOLUTION_FAILED: «При попытке разрешения имени (DNS) произошла
ошибка», а это значит, что сломался сам процесс поиска, а не что он просто вернулся пустым.
К этому приводит опечатка. Как и DNS-запись, которая ещё не распространилась, домен, чей срок истёк на выходных, и корпоративный или родительский DNS-фильтр, отказывающийся отвечать по вашему домену. Последнее важнее, чем кажется: для пострадавшего человека вашего сайта просто не существует, а у вас при этом всё работает идеально.
ERR_CONNECTION_REFUSED это второй этап, и самый информативный сбой из всего списка.
Что-то ответило. Машина по этому адресу активно сказала «нет», а значит DNS сработал, маршрут
сработал, и хост на месте, просто на этом порту никто не слушает. Неверный порт, упавший
сервис, контейнер, не поднявшийся после деплоя.
ERR_CONNECTION_TIMED_OUT это молчаливый провал второго этапа: «Время ожидания попытки
соединения истекло». Никто не сказал «нет», но и «да» тоже никто не сказал. Файрвол, который
отбрасывает пакеты вместо того чтобы их отклонять, выглядит ровно так же, как и сервер, слишком
занятый, чтобы принять соединение.
ERR_ADDRESS_UNREACHABLE это про маршрутизацию: «IP-адрес недостижим. Обычно это означает,
что до указанного узла или сети нет маршрута». Пакетам просто некуда идти.
ERR_INTERNET_DISCONNECTED это «Подключение к интернету потеряно», и это тот случай,
расследование которого можно прекращать сразу же. Дело в сети самого посетителя, и ни один
отчёт на этой основе ничего не говорит о вашем сайте.
ERR_EMPTY_RESPONSE это четвёртый этап: «Сервер закрыл соединение, не отправив никаких
данных». Обычно это ваш случай. Что-то приняло соединение, а затем исчезло, не ответив: процесс,
упавший посреди запроса, прокси, который сдался, воркер, убитый из-за нехватки памяти.
Сбои сертификатов тоже происходят на третьем этапе, но у них свой экран, а не этот.
Какой из пяти вариантов у вас, отдельный вопрос,
а у семейства ERR_CONNECTION_* есть
собственная статья
с подробным разбором разницы между refused и reset.
- Слабо
- Клиент говорит, что сайт лежит. У нас всё выглядит нормально. Попросили его почистить кэш.
- Лучше
- DNS_PROBE_FINISHED_NXDOMAIN, только в их офисной сети, на мобильном интернете работает. Это их DNS-фильтр, а не наш сервер. Подтвердили, что запись резолвится через три публичных резолвера.
Какая половина списка вообще ваша
Если рассортировать коды по тому, кто может их исправить, список делится почти поровну, и в этом вся польза.
Обычно это их сторона: DNS-сбои, когда имя фильтруется или закэшировано локально, пропавший интернет, недостижимый адрес и таймаут, вызванный их сетью, а не вашей нагрузкой.
Обычно это ваша сторона: отказ в соединении, пустой ответ и таймаут, когда ваши серверы действительно перегружены.
По-настоящему неоднозначный случай, и с него стоит начинать проверку: DNS-сбой, который воспроизводится через публичный резолвер, это ваша запись, а не их сеть. Такая проверка занимает десять секунд и закрывает самую крупную категорию в списке. На любой машине:
nslookup example.com 1.1.1.1
nslookup example.com 8.8.8.8
Если оба возвращают ваш IP, а посетитель всё равно получает NXDOMAIN, проблема между ним и его резолвером. Если не отвечает ни один, дело в вашей записи, и отсчёт идёт с момента её последнего изменения.
Session Replay
Бесплатное расширение для Chrome. Один клик на странице, которая ведёт себя не так, как нужно, и вы получаете скриншот, консоль и сетевой лог, а вместе с ними ссылку, которую можно вставить в тикет.
Проблема с отчётами, вот в чём вся суть
Каждый код выше появляется на странице, которую сгенерировал браузер. Ваш сайт вообще не запускался. Нет консоли, нет записи на вкладке сети, нет ошибки, которую поймает ваш трекер, и нечего записать никакому внутристраничному инструменту, включая наш.
Поэтому вся эта категория доходит до вас только если кто-то вам о ней расскажет, и расскажет плохо, потому что на экране нечего скопировать, кроме фразы и кода, о важности которого у него нет причин думать. Чаще всего такие сообщения приходят в виде «ваш сайт не работает» от человека, для которого это истинная правда.
Из-за этого уточняющий вопрос становится необычно ценным и необычно простым. Не «пожалуйста, воспроизведите с открытой консолью», это здесь невозможно. Вместо этого три вещи:
- Код, тот самый мелкий серый текст под сообщением, целиком.
- Повторяется ли это в другой сети, проще всего проверить на мобильном интернете.
- Может ли зайти кто-то ещё, это одним сообщением отделяет глобальный сбой от проблемы с резолвером одного человека.
Три ответа, и вы обычно уже знаете, какой из четырёх этапов сломался, ещё до того как заглянули на сервер. Это ваш баг или их сбой разбирает ту же логику для сервисов, которые работают, но с перебоями.
Что из этого стоит вынести
«Не удается получить доступ к сайту» это категория, а не диагноз, и шесть сбоев внутри неё делятся примерно поровну между тем, что вы можете исправить, и тем, что не можете.
Прочитайте код, определите, к какому из четырёх этапов он относится, и проверьте DNS через публичный резолвер прежде чем верить чему-либо ещё. А когда воспроизвести проблему не получается, помните, что недоступность сайта это тот единственный случай, когда ваша собственная машина наименее полезна как инструмент диагностики: она резолвит имя, подключается и работает.
Полный список этих ошибок в Chromium, с однострочным описанием каждой, это net_error_list.h.