Вопрос или проблема
Я использую OS X 10.8.5 и Chrome 30.
Я добавил 127.0.0.1 youtube.com
в свой файл /etc/hosts
, так что теперь он выглядит так:
# База данных хостов
#
# localhost используется для настройки интерфейса обратной связи
# во время загрузки системы. Не изменяйте эту запись.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
127.0.0.1 youtube.com
Когда я выполняю команду traceroute youtube.com
, я получаю ожидаемые результаты (youtube.com разрешается в 127.0.0.1):
traceroute to youtube.com (127.0.0.1), 64 hops max, 52 byte packets
1 localhost (127.0.0.1) 0.272 ms 0.118 ms 0.063 ms
Однако, когда я ввожу youtube.com в Chrome, мой браузер не устанавливает соединение с 127.0.0.1, а вместо этого с “нормальным” IP-адресом YouTube. Я ожидал, что Chrome разрешит youtube.com в 127.0.0.1.
У меня Chrome настроен на использование прокси-настроек системы. В OS X, когда я перехожу в Системные настройки > Сеть > “Дополнительно…” > Прокси, я выбрал “Автообнаружение прокси”.
Почему Chrome, похоже, игнорирует мой файл /etc/hosts
?
Попробуйте добавить www.youtube.com
в ваш файл hosts. youtube.com
постоянно перенаправляется на www.youtube.com
, так что, если вы хоть раз посетили youtube.com
, ваш браузер кэширует этот ответ и перенаправляет вас на www.youtube.com
. Этот адрес отсутствует в вашем файле hosts, поэтому Chrome логично разрешает его правильно.
Google Chrome игнорирует ваш файл hosts и выполняет фактические DNS-запросы (несмотря на то, что другие могут думать, /etc/hosts
не является частью DNS, это то, что использовалось до DNS). Хотя Google Chrome должен учитывать эти записи файла hosts, он этого не делает. Файл hosts, будучи альтернативой DNS, будет прочитан, когда нет доступного DNS-сервера (например, если вы отключили свое сетевое соединение).
Вы можете протестировать это, добавив “127.0.0.1 foobar.dev” в ваш файл hosts, затем включив wireshark и наблюдая за вашим сетевым интерфейсом. Откройте Chrome и введите http://foobar.dev/
в адресной строке и нажмите Enter. Вы увидите DNS-запрос в Wireshark, что-то вроде:
2 1.668727000 192.168.32.104 8.8.8.8 DNS 75 Стандартный запрос 0x663a A foobar.dev
Для справки, Google DNS возвращает 127.0.53.53 для foobar.dev.
3 1.706484000 8.8.8.8 192.168.32.104 DNS 91 Ответ на стандартный запрос 0x663a A 127.0.53.53
Рабочее решение – использовать HostAdmin – это старое расширение для Chrome, которое заставляет Chrome использовать файл hosts. Однако более новые версии Chrome (>38, похоже) больше не поддерживают его.
Я решил эту проблему, сделав следующее:
Отключите “Защита вас и вашего устройства от опасных сайтов” в Расширенных настройках Chrome.
Встроенная “защита” Chrome включает проверку домена напрямую через их собственный DNS и игнорирует определенные типы записей хоста, которые он считает “подозрительными”, или записи для сайтов, которые существуют и на которые идет переопределение, что означает, что большинство пользовательских записей хоста игнорируются. Особенно записи *.dev и *.local, используемые для разработки.
Отключение этого решает проблему на 100%. Это свело меня с ума на протяжении месяцев, когда я занимался локальной разработкой, и я не мог найти, чтобы это было описано где-то, все просто продолжали говорить, что этого не может быть. Оказалось, это всего лишь простой переключатель в расширенных настройках. Надеюсь, это поможет и вам, успехов.
Я наткнулся на этот вопрос, думая, что файл hosts
не работает в Chrome для macOS для фейковых доменов .dev
, которые я использую для разработки.
На самом деле он работает, по крайней мере в Chrome 77.
Проблема не в том, что домен не найден, а в том, что все .dev теперь автоматически перенаправляются на https:
Если вы дважды щелкнете на имени домена, вы сможете увидеть виновника:
Теперь, когда Google испортил наш .dev
, в качестве решения, по ссылке выше предлагается перейти на другой домен верхнего уровня для разработки, например .test
или .localhost
.
Localhost – это конвенция для адреса 127.0.0.1, который является внутренним адресом для tcp/ip, однако Chrome не использует /etc/hosts для разрешения адреса, он использует сервер DNS, поэтому любой адрес не поступает из вашего /etc/hosts, а из DNS-сервера, если бы он использовал /etc/hosts, ему пришлось бы содержать все www-имена хостов, чтобы разрешить любой адрес.
Надеюсь, это поможет.
Это обходное решение, но я предлагаю использовать расширение LiveHosts вместо файла hosts. У меня сработало.
Ответ или решение
Причины, по которым Google Chrome игнорирует файл /etc/hosts на ОС X, могут быть разными, и решение проблемы зависит от конкретной ситуации. Вот несколько возможных причин и способов их устранения:
-
Кэширование браузера: Chrome может запоминать IP-адреса, связанные с определенными доменами. Например, если вы раньше посещали youtube.com, браузер может перенаправлять вас на www.youtube.com, обойдя при этом файл hosts. Чтобы устранить эту проблему, добавьте также строку
127.0.0.1 www.youtube.com
в ваш файл hosts. -
Настройки прокси: Если в Chrome включены настройки прокси, они могут переопределять запросы DNS, сделанные через файл hosts. Попробуйте отключить автоматическое обнаружение прокси или временно снятие системы с прокси, чтобы проверить, сохраняется ли проблема.
-
Защита от вредоносных сайтов: Если включена функция "Защита вас и вашего устройства от опасных сайтов" в настройках Chrome, это может вызывать игнорирование некоторых записей файла hosts. Попробуйте отключить эту опцию, чтобы проверить, исчезнет ли проблема.
-
HSTS для TLD .dev: Если вы используете домены с окончанием .dev, имейте в виду, что Chrome автоматически перенаправляет такие домены на HTTPS, что может вызывать проблемы с доступом. Рассмотрите возможность использования альтернативных доменов, таких как .test или .localhost.
-
Расширения для браузера: Если проблема не решается, возможно, стоит использовать специализированные расширения для Chrome, такие как LiveHosts или HostAdmin. Эти расширения могут дать возможность браузеру напрямую использовать записи из файла hosts.
-
Тестирование с помощью сетевых инструментов: Вы можете использовать инструменты, такие как Wireshark, для отслеживания сетевых запросов. Это поможет вам убедиться, что встроенная функция DNS в Chrome действительно и игнорирует файл hosts или нет.
Если ни одно из перечисленных решений не помогло, попробуйте перезагрузить компьютер после внесения изменений в файл hosts, поскольку это может помочь ОС обновить кэш DNS.