Почему файл / etc / hosts не работает?

29

У меня были проблемы с этим некоторое время, и я попробовал все, что знаю, поэтому решил, что пришло время обратиться за помощью.

Любое редактирование, которое я делаю, /etc/hostsпросто не работает.

Пример:

julian@ifrit:~$ cat /etc/hosts
127.0.0.1   localhost
127.0.1.1   ifrit
192.168.1.100   dev.julianfernand.es

В приведенном выше примере, когда я получаю доступ dev.julianfernand.es(он не существует), он должен загружаться из 192.168.1.100.

Если я пингуюсь, все работает нормально. Однако когда я захожу dev.julianfernand.esс помощью Google Chrome или Firefox, это не так.

Теперь, после того, как я перезагружаю пару раз, это работает. Но так как я работаю в управляемой хостинговой компании WordPress, я сталкиваюсь со многими ситуациями, когда мне приходится редактировать свой файл, чтобы увидеть веб-сайт клиента на нашем сервере.

Я просто не могу перезагрузить компьютер. Это совсем не продуктивно. Перезапуск сетевого сервиса не работает, также как и для очистки кеша (даже внутреннего кеша DNS Chrome).

У кого-нибудь есть идея здесь? Это происходит с элементарной ОС (на основе Ubuntu 12.04) и Ubuntu 13.10 (ежедневно). Еще не пробовал ни с какой другой версией.

PS: если это имеет значение, у меня на этом компьютере работает сервер NGINX с PHP-FPM и MySQL.

Заранее спасибо :)

Джулиан Фернандес
источник
Трудно понять проблему. При сбое доступа к сайту через имя хоста (dev.julianfernand.es) вы можете получить к нему доступ по IP-адресу (192.168.1.100)?
Пантера
@ bodhi.zazen Да, я могу. Однако, поскольку наша компания не использует стандартную идею «IP доступа для доступа к веб-сайту» с общих хостов, это не работает.
Джулиан Фернандес
Я не предлагал вам доступ к веб-сайтам через ip в качестве долгосрочного решения. Эта информация помогает при отладке, поскольку исключает другие проблемы от брандмауэра до маршрутизации на стороне сервера.
Пантера
Что делать, если вы введете IP-адрес в адресной строке вашего браузера?
Сергей Колодяжный

Ответы:

14

В Ubuntu, если вы хотите очистить кеш DNS, вам нужно перезапустить nscdдемон.

Установите nscdс помощью следующей команды:

sudo apt-get install nscd

Очистите кэш DNS в Ubuntu, используя следующую команду:

sudo service nscd restart

ИЛИ

sudo service dns-clean start

Ссылка: http://www.upubuntu.com/2012/05/how-to-flush-clear-dns-cache-under.html

Арнольд
источник
Пожалуйста, проверьте конфигурацию Nginx и файл журнала ошибок. Там должно быть какая-то подсказка, когда вы заходите на сайт.
Арнольд
7

У меня сработало следующее: добавить

addn-hosts=/etc/hosts

в

/etc/NetworkManager/dnsmasq.d/hosts.conf

убить dnsmasq и

service NetworkManager restart
Рюдигер
источник
6

Для меня решение было редактировать /etc/nsswitch.confфайл (вы можете использовать команду sudo vim /etc/nsswitch.conf). Я изменил строку:

hosts:          files mdns4_minimal [NOTFOUND=return] dns

чтобы:

hosts:          dns files mdns4_minimal [NOTFOUND=return]

и теперь он работает как положено!

jmarceli
источник
1
Вы, вероятно, хотите filesв качестве первой записи, если вы хотите /etc/hostsиметь приоритет над результатами DNS-серверов.
Муру
Это странно, но это не ошибка, мне нужен именно этот приказ, чтобы он работал.
jmarceli
4

Принятый ответ работает с 12.04 по 13.04 путем отключения dnsmasq, но у меня перестал работать в 13.10. Я нашел следующее новое решение для 13.10.

Отредактируйте ваш / etc / default / dnsmasq и измените ENABLED=1на ENABLED=0и перезапустите.

Марк Э. Хаас
источник
2
у меня нет никакого файла dnsmasq по указанному пути. Я на Linux 15.04
Hiren
Там нет принятого ответа больше. О каком ответе вы говорите?
toon81
3

От: http://blog.calebthorne.com/2012/08/broken-etchosts-in-ubuntu-1204.html

Новая «особенность» в настольной версии Ubuntu 12.04 - это использование dnsmasqв качестве плагина для NetworkManager для локального DNS. Dnsmasq предназначен для ускорения служб DNS и DHCP, но имеет один неприятный побочный эффект: dnsmasqкэширует локальный DNS и игнорирует изменения /etc/hosts. Я часто делаю изменения в файле hosts, работая на веб-сайтах, поэтому эта «особенность» довольно раздражает.

Решение состоит в том, чтобы отключить dnsmasqв файле конфигурации Networkmanager. Откройте /etc/NetworkManager/NetworkManager.confи закомментируйте строку:

dns=dnsmasq

Мой NetworkManager.confфайл содержит следующее:

[main]
plugins=ifupdown,keyfile
# dns=dnsmasq

[ifupdown]
managed=false

Смотрите также https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/993298

пантера
источник
1
Пробовал это на 13.10 и элементарном OS, все равно ничего. Но спасибо за помощь! :)
Джулиан Фернандес
@JulianFernandes Похоже, что это не работает 13.10. Я последовал этому совету, и он сработал 12.04, но после обновления до 13.10 dnsmasq вернулся, и я не могу от него избавиться.
Марк Э. Хаас
ОИК проблема - bugs.launchpad.net/ubuntu/+source/network-manager/+bug/993298
Пантера
1

Простой и обновленный

  1. Создать /etc/NetworkManager/dnsmasq.d/hosts.conf.
  2. Положите строки, как address=/whatever/1.2.3.4в нем. Смотрите документы (ищите --address). Wildcards возможны: address/.whatever./1.2.3.4.
  3. Убить dnsmasq( ошибка ).
  4. Перезапустите его: $ service network-manager restart.
mightyiam
источник
0

Похоже, ваша установка очень похожа на мою. У меня есть сервер под управлением Ubuntu в качестве офисного сервера и хоста разработки. На этом я запускаю приложения Nginx, Apache, Tomcat, Rails и все, что мне нужно.

С моего Mac я могу просто добавить запись hosts и загрузить сервер с любым именем, которое мне нужно, но из клиента ElementaryOS это не работает.

Я пытался исправить выше, но безуспешно.

Я запустил Squid Proxy Server и добавил имена хостов в / etc / hosts на сервере. (Редактирование требует перезапуска squid.)

После этого установите соответствующие настройки прокси в вашем браузере или на панели управления ОС.

Джим О'Коннелл
источник
0

Проверьте разрешения на /etc/hostsфайл.

В моей облачной службе после клонирования сервера права доступа к файлу хостов изменились с 644на, 600так что я не могу прочитать файл с помощью apache ( www-data). Я убежал sudo chmod 644 hostsот, /etcи это исправило.

Проблема началась как:

MongoConnectionException Failed to connect to: localhost:27017: Previous connection attempts failed, server blacklisted. 

Я отследил это до переменной сервера в MongoClient, указывающей на localhost. Мне не удалось пропинговать localhost или имя хоста.

user228414
источник
Иногда мне
удавалось
0

Редактировать /etc/nsswitch.conf, закомментировать ниже строки, добавив # перед строкой

hosts:          files mdns4_minimal [NOTFOUND=return] dns myhostname

и добавить

hosts:          files mdns4_minimal [NOTFOUND=return] dns

В основном, конфигурация переупорядочена. Теперь процесс поиска домена сначала будет обращаться к файлу, /etc/hostsа затем - к DNS. При конфигурации по умолчанию он сначала обращается к DNS, а затем к любым другим соответствующим службам или файлам.

Для быстрого теста, работаете ли вы или нет, вы можете использовать

sudo python -m SimpleHTTPServer 80

создать простой HTTP-сервер для обслуживания файлов из каталога, а затем прокомментировать строку ниже в /etc/hostsфайле

127.0.0.1      localhost
127.0.1.1      01hw730983

и добавить

127.0.0.1       content

затем перейдите в браузер и введите content/, если вы видите структуру каталогов, которая работает, а то нет.

бот
источник