[个人原创]Apache多虚拟机配置下如何通过直接输入IP后确定指向哪个域名的方法,以及实践中发现apache加上虚拟主机后,用ip访问并不是指向刚安好Apache时的默认Web目录的解决办法。
通过测试和在PHP高级群里询问得知默认指向了我的一个虚拟机的网站,但是我们往往配置是这样的:
这个*.conf不知Apache去指向哪个虚拟主机了,于是,就在上面加了一个,成这样了:
经测试,直接输入IP访问时就是指向了/usr/local/apache2/htdocs 目录了,呵呵。
PHP高级群里有兄弟问:
要放在所有的VirtualHost前面吧?
答:
放后面也没关系。
一样的,我试了。
---------------------再次实践总结----------------------------
再次配置时,发现用apache的虚拟主机挂了好几个域名。 然后几天遇到的问题是如果直接用ip访问,或者用了一个未配置的域名的访问,那么刷出来的页面竟然不是apache的欢迎页,而是虚拟主机配置中的第一个域名。
原因分析并实践Ok如下:
apache网站解释为当一个请求到达的时候,服务器会首先检查它是否使用了一个能和
NameVirtualHost相匹配的IP地址。如果能够匹配, 它就会查找每个与这个IP地址相对应的
配置段, 并尝试找出一个ServerName或ServerAlias配置项与请求的主机名相同的。如果
找到了,它就会使用这个服务器的配置。 否则,将使用符合这个IP地址的第一个列出的虚拟主机。
其实这个时候,比如用ip直接访问,IE浏览器会提示他已经超出访问范围了。。
解决这个的问题的方案是添加下面的配置到虚拟机主机配置文件中(也就是如果有虚拟机后Apache不会去默认的那个DocumentRoot "d:/wamp/www/" 里,如果用IP访问Apache而是会去找第一个虚拟机的DocumentRoot ),要想在配置虚拟域名后还能指向当前的默认的那个DocumentRoot ,则在虚拟机配置的第一个加上一个指向默认的那个DocumentRoot目录的虚拟机配置即可)。
如下配置:
===========================================================================
apache 设置禁止IP直接访问:
刚好相反的对防止用IP访问到网站的方法,附录:
1.建一个虚拟机提示错误
apache虚拟主机默认情况下ip地址方式访问对应第一个虚拟主机,所以我们可以先建一个指向错误页面的虚拟主机,达到禁止用ip访问网页的目的。
<VirtualHost *:80>
ServerAdmin ngnix@qq.com
DocumentRoot "/usr/local/apache2.2.22/htdocs"
ServerName 192.168.3.140
</VirtualHost>
echo "请不要用IP访问" >/usr/local/apache2.2.22/htdocs/index.html
2.直接限制访问
<VirtualHost *:80>
ServerAdmin ngnix@qq.com
DocumentRoot "/usr/local/apache2.2.22/htdocs"
ServerName 192.168.3.140
<Directory />
Order deny,allow
Deny from all
</Directory>
</VirtualHost>
注意:在配置虚拟主机的时候,因为http.conf默认配置了默认主机,所以可以将http.conf里面配置主机的部分全部注释掉,所有主机都在http_vhost.conf里面配置。
这个*.conf不知Apache去指向哪个虚拟主机了,于是,就在上面加了一个,成这样了:
经测试,直接输入IP访问时就是指向了/usr/local/apache2/htdocs 目录了,呵呵。
PHP高级群里有兄弟问:
要放在所有的VirtualHost前面吧?
答:
放后面也没关系。
一样的,我试了。
---------------------再次实践总结----------------------------
再次配置时,发现用apache的虚拟主机挂了好几个域名。 然后几天遇到的问题是如果直接用ip访问,或者用了一个未配置的域名的访问,那么刷出来的页面竟然不是apache的欢迎页,而是虚拟主机配置中的第一个域名。
原因分析并实践Ok如下:
apache网站解释为当一个请求到达的时候,服务器会首先检查它是否使用了一个能和
NameVirtualHost相匹配的IP地址。如果能够匹配, 它就会查找每个与这个IP地址相对应的
配置段, 并尝试找出一个ServerName或ServerAlias配置项与请求的主机名相同的。如果
找到了,它就会使用这个服务器的配置。 否则,将使用符合这个IP地址的第一个列出的虚拟主机。
其实这个时候,比如用ip直接访问,IE浏览器会提示他已经超出访问范围了。。
解决这个的问题的方案是添加下面的配置到虚拟机主机配置文件中(也就是如果有虚拟机后Apache不会去默认的那个DocumentRoot "d:/wamp/www/" 里,如果用IP访问Apache而是会去找第一个虚拟机的DocumentRoot ),要想在配置虚拟域名后还能指向当前的默认的那个DocumentRoot ,则在虚拟机配置的第一个加上一个指向默认的那个DocumentRoot目录的虚拟机配置即可)。
如下配置:
===========================================================================
apache 设置禁止IP直接访问:
刚好相反的对防止用IP访问到网站的方法,附录:
1.建一个虚拟机提示错误
apache虚拟主机默认情况下ip地址方式访问对应第一个虚拟主机,所以我们可以先建一个指向错误页面的虚拟主机,达到禁止用ip访问网页的目的。
<VirtualHost *:80>
ServerAdmin ngnix@qq.com
DocumentRoot "/usr/local/apache2.2.22/htdocs"
ServerName 192.168.3.140
</VirtualHost>
echo "请不要用IP访问" >/usr/local/apache2.2.22/htdocs/index.html
2.直接限制访问
<VirtualHost *:80>
ServerAdmin ngnix@qq.com
DocumentRoot "/usr/local/apache2.2.22/htdocs"
ServerName 192.168.3.140
<Directory />
Order deny,allow
Deny from all
</Directory>
</VirtualHost>
注意:在配置虚拟主机的时候,因为http.conf默认配置了默认主机,所以可以将http.conf里面配置主机的部分全部注释掉,所有主机都在http_vhost.conf里面配置。
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/4629/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2012-12-28 09:51
评论列表