+++++++++++手册官网才是王道+++++++++
摘自apche的帮助手册:
apache 配置虚拟主机
- 一些古董级的客户端与基于域名的虚拟主机不兼容。为了与基于域名的虚拟主机兼容,客户端必须发送"Host"头。HTTP/1.1规范中对此做了要求。而所有现在常见的仅支持HTTP/1.0的旧版本浏览器都以附加的方式实现了这个要求。如果你又想支持这些老浏览器,又想使用基于域名的虚拟主机。我们提供了一个技术方案,你可以在本文末尾看到它。
- SSL协议先天特性决定了基于域名的虚拟主机无法成为SSL安全服务器。
- 一些操作系统和网络设备实现的带宽管理技术无法在多个主机共享一个IP的情况下区别它们。
相关模块 | 相关指令 |
---|---|
NameVirtualHost
指令来进行配置。如果服务器上所有的IP地址都会用到,你可以用"*
"作为NameVirtualHost
的参数。如果你打算使用多端口(如运行SSL)你必须在参数中指定一个端口号,比如"*:80
"。请注意,在NameVirtualHost
指令中指定IP地址并不会使服务器自动侦听那个IP地址。请参阅设置Apache使用的地址和端口一章获取更多详情。另外,这里设定的IP地址必须对应服务器上的一个网络接口。<VirtualHost>
段。<VirtualHost>
的参数与NameVirtualHost
的参数必须是一样的(比如说,一个IP地址或"*
"代表的所有地址)。在每个<VirtualHost>
段中,至少要有一个ServerName
指令来指定伺服哪个主机和一个DocumentRoot
指令来说明这个主机的内容位于文件系统的什么地方。取消中心主机(Mainhost)
<VirtualHost>
定义块。这个虚拟主机中ServerName
和DocumentRoot
所包含的内容应该与全局的ServerName
和DocumentRoot
保持一致。还要把这个虚拟主机放在配置文件的最前面,来让它扮演默认主机的角色。www.domain.tld
提供服务,而你又想在同一个IP地址上增加一个名叫www.otherdomain.tld
的虚拟主机,你只需在httpd.conf
中加入以下内容:NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
</VirtualHost>
<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost>
—————————————————————————————
NameVirtualHost
和<VirtualHost>
指令中的"*
"号,以达到一些特定的目的。比如说,你可能会希望在一个IP地址上运行一个基于域名的虚拟主机,而在另外一个IP地址上运行一个基于IP的或是另外一套基于域名的虚拟主机。ServerAlias
指令放入<VirtualHost>
小节中来解决这个问题。比如说在上面的第一个<VirtualHost>
配置段中ServerAlias
指令中列出的名字就是用户可以用来访问同一个web站点的其它名字:ServerAlias domain.tld *.domain.tld
domain.tld
的访问请求都将由虚拟主机www.domain.tld
处理。通配符标记"*
"和"?
"可以用于域名的匹配。当然你不能仅仅搞个名字然后把它放到ServerName
或ServerAlias
里就算完了。你必须先在你的DNS服务器上进行配置,将这些名字和您服务器上的一个IP地址建立映射关系。<VirtualHost>
段中,以更好的配置一个虚拟主机。大部分指令都可以放入这些<VirtualHost>
段中以改变相应虚拟主机配置。如果您想了解一个特定的指令是否可以这样运用,请参见指令的作用域。主服务器(main server)范围内的配置指令(在所有<VirtualHost>
配置段之外的指令)仅在它们没有被虚拟主机的配置覆盖时才起作用。NameVirtualHost
相匹配的IP地址。如果能够匹配,它就会查找每个与这个IP地址相对应的<VirtualHost>
段,并尝试找出一个与请求的主机名相同的ServerName
或ServerAlias
配置项。如果找到了,它就会使用这个服务器。否则,将使用符合这个IP地址的第一个列出的虚拟主机。NameVirtualHost
指令中的配置相符的时候,主服务器中的DocumentRoot
将永远不会被用到。所以,如果你想创建一段特殊的配置用于处理不对应任何一个虚拟主机的请求的话,你只要简单的把这段配置放到<VirtualHost>
段中,并把它放到配置文件的最前面就可以了。<VirtualHost *:80>
ServerName localhost
DocumentRoot e:\wamp\www
</VirtualHost>
<VirtualHost *:80>
ServerName www.test.com
DocumentRoot e:\wamp\www\mypro/test
</VirtualHost>
RewriteRule ^/index.html$ /col/6/index.html [L]
</VirtualHost>
--------————————————————————