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

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

我已将这些行添加到 hosts 文件中:

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 服务器软件正在运行,但尚未添加任何内容。”

答案1

我可以确认您的问题,即在 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/hostsadobe.com 条目,每次更改时它都成功了。但是,您使用了 Firefox,它可能第一次成功了,但在来回更改hosts文件后,它不知何故停止了工作。这意味着存在缓存问题或解析正确名称的问题。

对于 Firefox 并解析名称,Firefox 会添加前缀万维网到 Adob​​e 网站,因此它看起来像“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 桌面版默认没有安装 DNS 缓存服务。最常见的是神经胶质细胞如果你已经安装了这个,那么一个简单的/etc/init.d/nscd restart就可以了。但是大多数人都不会安装这个,所以我们可以推翻 Ubuntu 系统的错误。

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

这样就剩下浏览器了。

要了解 Firefox 的 DNS 缓存是否不好,您可以安装一个插件来检查 Firefox 中的 DNS 缓存。我推荐的是DNS 缓存

在此处输入图片描述

重新启动 Firefox 后,您应该会在底部看到一个齿轮(类似于右上角的 Ubuntu 齿轮)。您可以左键单击或右键单击该齿轮,然后应该会看到诸如启用/禁用 DNS 和刷新 DNS 之类的选项。如果问题出在 Firefox DNS 缓存上,这将有所帮助。试试看。

我想我已经知道了所有可以解决这个问题的方法。如果我漏掉了什么,请告诉我。

答案2

我知道这个帖子已经有一年了,但我在寻找相同问题的答案时偶然发现了它。我终于找到了解决方案!原来该/etc/hosts文件被 DNS 完全绕过了。要更改此设置,您必须编辑下的/etc/nsswitch.conf和 include 。示例如下:fileshosts

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 不再需要此信息,但对于任何寻求此问题答案的人来说,这仍然很有用。

您还必须重新启动才能使此设置生效

答案3

我相信etc/hosts它在网络软件堆栈中的使用比浏览器本身更广泛。也就是说,该文件中的更改应该会影响任何浏览器。

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

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

答案4

你可以尝试:

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

     # /etc/hosts
     127.0.0.1  localhost
     127.0.1.1  myhost01
     127.0.1.2  myhost02
    

相关内容