Apache配置完虚拟主机后,使用Chrome访问localhost还是默认目录htdocs

Chrome 解析DNS出错,这个错误比较罕见,甚至说有点奇特。今天在使用Apache配置虚拟主机时,出现了一个非常奇怪的现象。我按照配置的步骤配置虚拟主机,如下

配置虚拟主机的步骤如下:

1. 启用  httpd-vhosts.conf

在 httpd.conf 文件中

# Virtual hosts ,虚拟主机

Include conf/extra/httpd-vhosts.conf

2. 在httpd-vhosts.conf文件中做配置

#配置我们自己的虚拟主机

<VirtualHost 127.0.0.1:80>

DocumentRoot "d:/myblog"

#这里配置欢迎首页面

DirectoryIndex index.html index.htm index.php

<Directory />

Options FollowSymLinks

#不许可别人修改我们的页面

AllowOverride None

#设置访问权限

Order allow,deny

Allow from all

//由于版本更新,所以这个语句不能再使用,Apache2.4需要使用Require all granted

</Directory>

</VirtualHost>

3.修改hosts 文件

.127.0.0.1            localhost

但是很遗憾的是,我调试的浏览器是Chrome,这就使得我刚开始解决问题时就出现错误的方向,我刚开始认为是自己的配置错误,所以一直在尝试,但是最后都没有发现问题,Chrome浏览器停留在这个页面。(这个页面就是Apache的默认页面,而不是虚拟主机中的页面)

Apache配置完虚拟主机后,使用Chrome访问localhost还是默认目录htdocs

后来,我觉得会不会是hosts文件出错呢?所以我尝试使用IP:http://127.0.0.1/访问,让我惊讶的是,这时候访问成功了。

Apache配置完虚拟主机后,使用Chrome访问localhost还是默认目录htdocs

所以我决定问题就出现在localhost与IP:http://127.0.0.1/之间,找到问题的发生点,然后我在百度搜索出来的结果如下
1、localhost也叫local ,正确的解释是:本地服务器
 
127.0.0.1在windows等系统的正确解释是:本机地址(本机服务器)
 
他们的解析通过本机的host文件,windows自动将localhost解析为127.0.0.1
 
2、localhot(local)是不经网卡传输!这点很重要,它不受网络防火墙和网卡相关的的限制。
 
127.0.0.1是通过网卡传输,依赖网卡,并受到网络防火墙和网卡相关的限制。
本机IP 也是通过网卡传输的,依赖网卡,并受到网络防火墙和网卡相关的限制。
但是本机IP与127.0.0.1的区别是:
 
127.0.0.1 只能通过本机访问
本机IP 通过本机访问也能通过外部访问
一般设置程序时本地服务用localhost是最好的,localhost不会解析成ip,也不会占用网卡、网络资源。
但是即使找到这些区别我也没法解决这个问题啊,因为我的配置在网上的资料中是正确的。那么,我觉得最关键的可能就是Apache的版本问题,但是搜索后也没有出现这种情况。
这时候只剩下最后一种可能,那就是浏览器有问题,于是,我用了搜狗浏览器去访问。结果显示正常,终于知道问题在哪里了。就是Chrome浏览器出了问题。

Apache配置完虚拟主机后,使用Chrome访问localhost还是默认目录htdocs

确定问题来源后,我再次在百度查找答案,不过我找不到答案。我觉得主要原因可能是因为比较少人使用,而且不是主流,所以碰到这种问题比较少。所以只好FQ出去,到谷歌找答案。
原来问题的关键在于dns的解析上,不过我真的很笨,dns就是浏览器解析的啊,肯定是浏览器出现了问题。
我把问题的解决方法告诉大家:
down voteaccepted

方法一:1Clear up the Chrome's DNS cache by typing this in the Chrome browser

  • chrome://net-internals/#dns

Screenshot -> Flushing Chrome DNS cache

  • You will see a button "Clear Host Cache". Press that DNS cache will be flushed.

  • Keep this DNS window open. Now access the virtual host in the browser for me it was http:/api.localhost. Once you do that you will see a new entry in the DNS window. for me it was "localhost." notice the period "." at the end of localhost that showed an error.

  • Last step is to simply add this entry as

    127.0.0.1 localhost.

    in the hosts file located at for ubuntu : /etc/hosts

    for windows : C:\Windows\System32\drivers\etc\hosts

方法二:Another solution could be to ditch the .localhost /.dev at the end of your local virtual host domain

This has to do with some new changes by google. ".dev" and ".local" comes under google's TLD (In the corner of the internet where people care about DNS, there is a bit of an uproar at Google's application for over a hundred new top-level domains, including .dev etc)

Use a domain name you own. Possibly using the full name like "localhost.dev.$yourdomain" could help here on the setup.

原来,谷歌浏览器升级之后,对DNS的解析产生了新的规则,如.localhost/.dev都属于 google's TLD 中的一种了,所以,再也不能使用谷歌浏览器通过localhost访问本地了。不过上述的方法一我在测试后发现还是不可行,猜测原因是随着更高版本的升级,对DNS的解析更加严格了。所以在这里还是推荐使用方法二,也就是把localhost改为localhost.dev.$yourdomain"或者其他(只要不出现”.localhost“就可以了)。当然,这个需要在 windows : C:\Windows\System32\drivers\etc\hosts中配置。
所以到这里,问题就完美解决了。
在这里再次提醒自己,遇到问题不要慌,深入分析问题,分析出问题属于哪一类的问题,使用便于搜索的词语描绘这个错误,在搜索引擎中搜索相应的解决办法,如果还是解决不了,到谷歌上去搜,如果还是解决不了,可以到论坛上面发问,这样,一般都不会出现解决不了的问题。stack overflow真的是一个好地方,我有很多问题都在这里找到解决的方法。
上一篇:android aapt 用法 -- ApkReader


下一篇:【转】AD常用端口