apache 虚拟主机设置

环境:

os:ubuntu9.0.4

apache: Apache/2.2.11 (Ubuntu)

在ubuntu下apache的配置和redhat系列稍有不同

apache2的虚拟主机配置取决于几个重要的配置文件
/etc/apache2/ports.conf 放置 NameVirtualHost指令和Listen指令
/etc/apache2/sites-enable/* 放置虚拟主机的软链, 软链到/etc/apache2/sites-available/目录的同名文件 我了解为方便配置,一个文件一个虚拟主机
/etc/apache2/sites-available/* 放置虚拟主机文件的地方

apache2没有主服务器的说法,当然你可以配置,一切都是虚拟主机通过VirtualHost指令来配置

1)基于域名的虚拟主机

NameVirtualHost addr[:port] 这个指令是必须的
否者虚拟主机不会有效果

比如两个配置文件www 和www1,
www
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName www.toy.org
DocumentRoot /var/www
</VirtualHost>

www1
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName www1.toy.org
DocumentRoot /var/www1
</VirtualHost>

设置NameVirtualHost *:80后一切正常,
如果不设置,http://www.toy.org 和http://www1.toy.org 都会访问www配置
为什么都访问www,而不是www1,到底以那个配置为准
我猜测,apache2会安配置文件的名字排序,已排在前面的配置为准
为了验证这个猜测,我将www名字改为zzz,
果然http://www.toy.org 和http://www1.toy.org 都会访问www1配置

注意NameVirtualHost 后面的addr[:port] 必须和VirtualHost 后面的addr[:port]严格一致,
比如NameVirtualHost *:80 VirtualHost 127.0.0.1:80是不匹配的

另外你
可通过shell脚本 /usr/sbin/apache2ctl -S
或者 二进制脚本 sudo /usr/sbin/httpd -S
调试虚拟主机设置

2)基于ip地址的虚拟主机
www
<VirtualHost 127.0.0.1:80>
ServerAdmin webmaster@localhost
ServerName www.toy.org
DocumentRoot /var/www
</VirtualHost>

www1
<VirtualHost 192.168.1.103:80>
ServerAdmin webmaster@localhost
ServerName www1.toy.org
DocumentRoot /var/www1
</VirtualHost>

无须设置NameVirtualHost

3)_default_虚拟主机
比如
<VirtualHost _default_>
DocumentRoot /www/htdocs
</VirtualHost>
如果apache找不到(ip地址:端口号)对应的虚拟主机,那么就使用_default_虚拟主机

小结
上面两种是虚拟主机配置最基本的情况,复杂的比如将上面的基本情况混杂在一起,但基本原理不变 :

1)基于域名的虚拟主机和基于IP的虚拟主机之间互相不干扰。基于IP的虚拟主机只接受发送到它自身地址集的请求,而不接受其他IP地址。
基于域名的虚拟主机也是一样,它们只接受NameVirtualHost指令定义的地址集的访问

2)永远不会对一个基于IP的虚拟主机执行ServerAlias和ServerPath检查

3)仅当没有其他虚拟主机符合客户端请求的IP地址和端口号时,"_default_"虚拟主机才会捕获这个请求。
并且仅当"_default_"虚拟主机的端口号(默认值由您的Listen指定)与客户端发送请求的目的端口号相符时,这个请求才会被捕获。
也可以使用通配符(例如:"_default_:*")来捕获任何端口号的请求

4)应当为每个虚拟主机设定ServerName 。否则就会需要为每个虚拟主机进行DNS查询

5)
在开启虚拟主机的情况下,当一个请求到达的时候,服务器会首先检查它是否使用了一个能和NameVirtualHost相匹配的(ip地址:端口号)
如果能够匹配,它就会查找每个与这个(ip地址:端口号)相对应的<VirtualHost>段,并尝试找出一个与请求的主机名相同的ServerName或ServerAlias配置项。
如果找到了,它就会使用这个服务器。否则,将使用符合这个(ip地址:端口号)的第一个列出的虚拟主机,(怎么确定第一个,这个在上文已讨论 ),
如果连这个地址的虚拟主机都找不到,就去找_default_虚拟主机, 如果还找不到,返回404

6)别忘了使用上文提到的 httpd -S来调试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值