我在 VirtualBox 上运行 Ubuntu 11.10,并设置了一个虚拟命名服务器。
我可以从 Windows 7 访问此网站,但无法从 Ubuntu 访问该网站。
我的 HOSTS 文件位于/etc/
文件夹中,如下所示:
127.0.0.1 localhost
127.0.1.1 ubuntu-VirtualBox
192.168.0.97 mysite.com
但每当我尝试从服务器访问 mysite.com 时,我都会被重定向到一个网站,提示该域名正在出售。
hosts 文件不起作用可能是什么原因造成的?
更新
这是我的/etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat
group: compat
shadow: compat
#hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
答案1
首先,检查 nsswitch.conf 是否正确:
$ grep hosts /etc/nsswitch.conf
hosts: files dns
确保它说的是“文件 dns”,否则它在询问 DNS 之前不会查看你的主机文件。
如果在 nsswitch 中正确,我之前曾看到过一个不可见的字符以某种方式进入了我的 hosts 文件,导致它看起来完全正常,但这个不可见的字符使它无法工作。
因此,请尝试删除该行,然后重新创建它 - 手动创建,不要粘贴。
接下来你可以尝试通过 ping 来测试它查找的内容:
$ ping mysite.com
PING mysite.com (192.168.0.97) 56(84) bytes of data.
如果您在那里看到正确的 IP 地址,则它确实解析正确,并且您的浏览器是导致问题的原因。不要使用 host、dig 或 nslookup,它们会忽略 /etc/hosts!使用 ping 解析 IP 地址,因为大多数应用程序都会看到它。
答案2
跑步curl -Iv http://mysite.com
你应该得到类似的结果(加上更多行):
* About to connect() to mysite.com port 80
* Trying 192.168.0.97... connected
* Connected to mysite.com (192.168.0.97) port 80
> HEAD / HTTP/1.1
> User-Agent: curl/7.15.5 (i686-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
> Host: mysite.com
> Accept: */*
>
< HTTP/1.1 200 OK
实际上,这里有一个想法:您访问的是“mysite.com”还是“www.mysite.com”?如果是后者,则您的 hosts 文件中没有这样的条目,因此会失败。如果您要访问“mysite.com”,但您的 Web 服务器将其重定向到“www.mysite.com”,那么也会失败。
请注意我的 curl 输出片段末尾的“200 OK”。如果您收到 301,则表示您的 Web 服务器配置会将您重定向到其他地方。
答案3
在将条目添加到 /etc/hosts 后,我必须注销并重新登录
答案4
默认情况下,文件“/etc/hosts”的文件权限为 600。尝试以下命令: sudo chmod 644 /etc/hosts