/ etc / hosts修改无法正常工作。该怎么办?


10

我已将以下行添加到主机文件:

127.0.0.1 localhost adobe.com
127.0.0.1 adobe.com

它在Windows上完美运行。但是在Ubuntu 11.10中,当我尝试使用Firefox访问它时,该网站正在打开。

Google chrome尽管支持/ etc / hosts配置。Google chrome正在显示:

“有效!这是该服务器的默认网页。该Web服务器软件正在运行,但尚未添加任何内容。”

Answers:


10

我可以确认您的问题,它似乎同时影响Chrome和Firefox,仅影响Firefox。对于受相同问题影响的用户,以及受两个/所有浏览器影响的用户,这是一个答案。请按照以下步骤操作,以使其正常工作。假设您已经编辑了/etc/hosts文件,建议使用以下两种方式编辑文件:

  • Gedit- gksudo gedit /etc/hosts(您现在可以通过GUI友好的方式来编辑文件。提供gksudo的gksu在正式的18.04和更高版本的存储库中已终止。)
  • nano- sudo nano /etc/hosts(您现在可以通过终端友好的方式来编辑文件。)

例如:

127.0.0.1 localhost adobe.com

要么

127.0.0.1 localhost
127.0.0.1 adobe.com

(都是同一回事。)

您首先要进行测试,以从终端查看它是否正常运行。类型ping adobe.com,它应该从为其分配的IP响应。在这种情况下,它应该以127.0.0.1响应。这意味着可以。

然后,我们继续浏览器测试。您测试了Chrome,它可以正常工作。您/etc/hosts在拥有和没有adobe.com条目之间进行了更改,并且每次更改它都可以使用。但是,当您使用Firefox时,它可能第一次起作用了,但是在hosts来回更改文件后,它以某种方式停止了工作。这意味着它是缓存问题或解析正确名称的问题。

对于Firefox并解析名称,Firefox 在Adobe网站上添加了前缀www,因此它看起来像是“ www.adobe.com”,而在Chrome上看起来像是“ adobe.com”。它们都指向同一地点,而www前缀只是告诉您所访问的地点是Web服务。但是,如果遇到问题,则需要将其添加到hosts文件中,以便Firefox在添加前缀www时可以使用。所以它看起来像这样:

127.0.0.1 localhost
127.0.0.1 adobe.com www.adobe.com

还是一样

127.0.0.1 localhost adobe.com www.adobe.com

注意:请记住,您必须按F5刷新站点/ Firefox选项卡,或关闭该选项卡并再次打开以进行测试。不知怎的,Enter像疯了一样压迫。

这应该可以解决某些用户的问题,但是假设到目前为止您仍然尚未解决问题,我们可以测试出可能的结果。

然后,我们在此处获得了几个级别的缓存来检查。您拥有了程序缓存(在本例中为Firefox),然后有系统缓存(在本例中是Ubuntu),然后有了硬件缓存(在本例中是路由器)。

据我所知,Ubuntu Desktop版本默认没有安装DNS缓存服务。最知名的是nscd,如果您安装了nscd,则可以轻松/etc/init.d/nscd restart完成。但是对于大多数人来说,他们将不会安装此程序,因此我们可以推翻Ubuntu系统的故障。

剩下路由器和Web浏览器。对于路由器,您必须将其配置为停止DNS缓存或重新配置它以解决此问题。这完全取决于路由器的型号,制造商等。并非所有路由器都进行DNS缓存,但有些路由器会这样做,如果具有此选项并且是否启用了该选项,则需要在其配置中查看。但是,让我们假设您没有启用DNS缓存的路由器。

离开浏览器。

要确定Firefox在DNS缓存方面是否存在问题,可以安装一个插件来检查Firefox中的DNS缓存。我推荐的是DNS缓存

在此处输入图片说明

重新启动Firefox后,您应该在底部看到一个齿轮(类似于右上角的Ubuntu齿轮)。您可以左击或右键单击Cog,并且应该会看到诸如启用/禁用DNS并刷新它的选项。在问题为Firefox DNS缓存的情况下,这将有所帮助。玩吧。

我想我已经找到解决问题的所有方法。如果我错过了什么,请告诉我。


如果Firefox不尊重本地计算机的hosts文件(也就是说,即使在www添加具有子域的域之后,甚至在刷新页面后,问题仍然存在),我建议将其报告为错误。(我不知道这将是一个错误,因为Firefox的大概使用操作系统的DNS解析设施,,还是应该尊重它。但是你可以对报告它firefox在Ubuntu,然后再排除故障可能可能从那里重新定位。)
Eliah Kagan

@EliahKagan它还取决于托管/域的位置和方式。有些站点提供了启用使用www子域的选项,而有些站点没有对其进行预配置,因此当尝试访问www.eliah.com时,它不起作用,而eliah.com则起作用。
路易斯·阿尔瓦拉多

当然是。我并不是说那www.foo.net应该因为工作而foo.net起作用。相反,如果foo.netwww.foo.net都定义为127.0.0.1in /etc/hosts,则foo.net在Web浏览器的地址栏中键入并按Enter键将导致浏览器尝试打开与的连接127.0.0.1:80。如果不是,则表明某个地方存在错误。
伊利亚·卡根

@EliahKagan-啊!是的,当然可以。在这种情况下,如果它无法正常工作,则该计算机被恶魔拥有。我们将需要驱魔人和大量圣水,或者需要对问题进行更好的诊断。
Luis Alvarado 2013年

驱魔人+圣水更好的诊断似乎是最谨慎的过程。:)
Eliah Kagan

7

我知道这个线程已经使用了一年,但是我偶然发现了这个线程,以寻找同样问题的答案。我终于找到了解决方案!原来/etc/hosts文件已被DNS完全绕过。要更改此设置,您必须编辑/etc/nsswitch.conffiles在下添加hosts。下面的例子:

passwd:         compat
group:          compat
shadow:         compat

hosts:          dns files myhostname <-- this line here.
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

这将确保该/etc/hosts文件包含在名称解析检查中。它将首先检查DNS,然后检查hosts文件。我确定OP不再需要此信息,但这对于寻求该问题答案的任何人仍然有用。

您还必须重新启动才能生效


我在Ubuntu 12.04上在那里有“文件mdns4_minimal [NOTFOUND = return] dns mdns4”,但是/ etc / hosts仍然无法正常工作……看起来我遇到了另一个问题。
Shnatsel

您可以粘贴完整的代码吗?
山姆春武里

这是完整的配置文件:pastebin.com/hDBGrrwn我想这是Ubuntu 12.04上的默认设置
Shnatsel

一切看起来都正确。您想做什么?
Sam Chonburi

我没有:我要在此行中添加什么?/etc/hostshosts?要不然是啥?
Hi-Angel 2014年

2

我相信etc/hosts,在网络软件堆栈中,它的使用程度要高于浏览器本身。即该文件中的更改应影响任何浏览器。

您看到的可能是Firefox缓存DNS条目的结果-即您在Firefox中打开了网站,Firefox记住了与adobe.com域相对应的IP地址,您修改/etc/hosts并重新加载了页面-Firefox不会发出新的DNS查询并改用缓存的数据。然后打开Chrome,它会进行新的DNS查询,并使用您输入的任何内容/etc/hosts作为adobe.com的IP地址

重新启动Firefox应该可以解决问题。


2

所有答案都是不错的,但是最简单的解决方法是:

修改/ etc / hosts(并可能重新启动Firefox)后,请使用重新加载有问题的标签Ctrl+Shift+R。它将绕过Firefox可能具有的任何类型的缓存。


1

我的问题是,同一域名有多个条目。系统只看到第一次出现。

127.0.0.1 domain1.com domain2.com domain3.com # <-- WENT UNNOTICED
# .
# .
192.168.1.21 domain1.com # <-- DOESN'T WORK

0

您可以尝试:

  1. 编辑/ etc / hosts文件。
  2. 添加下一行

     # /etc/hosts
     127.0.0.1  localhost
     127.0.1.1  myhost01
     127.0.1.2  myhost02
    

0

在Ubuntu 14.04中,将/ etc / hosts文件更改为每行只为我工作一台主机,我在使用IP主机主机上工作了数小时,然后在每行上更改为IP主机,然后工作了。


0

我在各种版本的Ubuntu上都遇到了同样的问题。最新的版本在17.04和16.04上扬起了丑陋的头。我发现我必须像这样格式化主机文件:

127.0.0.1本地主机

127.0.0.1 www.facebook.com facebook.com

也就是说,您需要同时在网址中输入www,然后再次输入。我不知道为什么这样。只需保存文件,然后ping网址,如下所示:

ping www.facebook.com

它应该解析为回送地址或您想要的任何其他地址。例如:

80.82.xxx.xxx www.example.com example.com

为我工作。

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.