为什么/ 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

如果我ping通,就可以了。但是,当我dev.julianfernand.es使用Google Chrome或Firefox 访问时,却没有。

现在,重新启动几次后,它可以工作了。但是,由于我在一家托管的WordPress托管公司工作,因此我不得不处理很多情况,必须编辑文件才能在服务器上查看客户的网站。

我只是无法继续重启计算机。它根本没有生产力。重新启动网络服务不起作用,清除缓存(甚至是内部Chrome DNS缓存)也是如此。

有人在这里有个主意吗?这是在elementaryOS(基于Ubuntu 12.04)和Ubuntu 13.10(每天)上发生的。尚未尝试任何其他版本。

PS:如果这件事,我有一个在本机上运行的NGINX服务器,带有PHP-FPM和MySQL。

提前致谢 :)


问题很难知道。通过主机名(dev.julianfernand.es)访问该站点失败时,可以通过IP地址(192.168.1.100)访问该站点吗?
Panther

@ bodhi.zazen是的,我可以。但是,由于我们公司不使用共享主机的默认“访问IP来访问网站”的想法,因此无法使用。
朱利安·费尔南德斯

我不建议您通过ip作为长期解决方案访问网站。尽管该信息排除了从防火墙到路由到服务器端问题的其他问题,但仍有助于调试。
Panther

如果在浏览器的地址栏中输入IP地址,该怎么办?
Sergiy Kolodyazhnyy 2015年

Answers:


14

在Ubuntu中,如果要刷新DNS缓存,则需要重新启动nscd守护程序。

nscd使用以下命令进行安装:

sudo apt-get install nscd

使用以下命令在Ubuntu中刷新DNS缓存:

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文件(您可以使用command sudo vim /etc/nsswitch.conf)。我更改了行:

hosts:          files mdns4_minimal [NOTFOUND=return] dns

至:

hosts:          dns files mdns4_minimal [NOTFOUND=return]

现在它正在按预期工作!


1
files如果要/etc/hosts优先于DNS服务器的结果,则可能要作为第一个条目。
muru 2015年

这很奇怪,但这不是错误,我必须完全具有此顺序才能使其正常工作。
jmarceli 2015年

4

通过禁用dnsmasq,可接受的答案在12.04到13.04之间有效,但在13.10上停止为我工作。我为13.10找到了以下新解决方案。

编辑/ etc / default / dnsmasq并更改ENABLED=1ENABLED=0并重新启动。


2
我在指定的路径中没有任何dnsmasq文件。我使用的是Linux 15.04
Hiren 16'Aug

不再有已接受的答案。您在说哪个答案?
toon81 '18

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。我在网站上工作时经常对主机文件进行更改,因此此“功能”非常烦人。

解决方案是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和elementaryOS上进行了尝试,仍然没有。但是,谢谢您的帮助!:)
朱利安·费尔南德斯

@JulianFernandes看来这在13.10上不起作用。我遵循了这个建议,它可以在12.04上工作,但是升级到13.10后,dnsmasq又回来了,我无法摆脱它。
Mark E. Haase 2014年


1

简单更新

  1. 创建 /etc/NetworkManager/dnsmasq.d/hosts.conf
  2. address=/whatever/1.2.3.4在其中放置线条。请参阅文档 (查找--address)。通配符是可能的:address/.whatever./1.2.3.4
  3. 杀死dnsmasqbug)。
  4. 重新启动它:$ service network-manager restart

0

听起来您的设置与我的非常相似。我有一台运行Ubuntu作为我的办公服务器和开发主机的盒子。在那个盒子上,我运行Nginx,Apache,Tomcat,Rails应用程序以及其他我需要的东西。

在Mac上,我可以简单地添加一个主机项,然后以我需要的名称加载服务器,但是从ElementaryOS客户端上,这是行不通的。

我尝试了以上修复程序,但没有成功。

我所做的是运行Squid代理服务器,并将主机名添加到服务器上的/ etc / hosts中。(编辑需要重新启动squid。)

之后,在浏览器或操作系统的控制面板中进行适当的代理设置。


0

检查/etc/hosts文件权限。

克隆服务器后,在我的云服务上,主机文件的权限从更改为644600因此www-data我猜apache()无法读取该文件。我sudo chmod 644 hosts从那里跑来,/etc并固定了它。

问题开始为:

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

我在MongoClient中将其跟踪到指向本地主机的服务器变量。我无法ping本地主机或主机名。


在这种情况下,有时我会成功地将'localhost'更改为'127.0.0.1'–
pbr

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 Server来从目录中提供文件,然后在/etc/hosts文件中的下面注释

127.0.0.1      localhost
127.0.1.1      01hw730983

并添加

127.0.0.1       content

然后转到浏览器并键入content/,如果您能够看到Directory结构其工作正常,则不能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.