什么是虚拟主机
虚拟主机用于在物理的一台主机上运行多个站点,譬如:www.example1.com、www.example2.com,也可以是这样的:www.example.com、blog.example.com。
虚拟主机有两种类型:IP-based 和name-based,前者用于同一台主机上的多个站点具有不同的IP 地址,后者用于同一台主机上的多个站点使用同一个IP 地址,仅依靠名字来区分不同的站点。
apache 1.1 版本之后开始支持这两种虚拟主机类型,平常我们一般谈到和用到的虚拟主机都是第二种类型:name-based 。
name-based 的限制
一些比较古老的浏览器无法正确访问虚拟主机的站点,这是因为部分基于http 1.0 的浏览器不发送http 主机头信息(host header)。所有基于http 1.1 的浏览器和部分比较流行的http 1.0 浏览器则不存在此问题。
使用安全套接层协议(SSL)的服务器不能使用虚拟主机,这是由于SSL 协议本身的特性决定的。
一些由操作系统或者网络设备实现的带宽管理技术会遇到问题,因为它们可能无法通过IP 区分不同的站点。
设置一个name-based 虚拟主机
以linux 环境采用apache 服务器为例,设置虚拟主机,需要有至少一个独立外网IP ,至少一个域名,并且可以修改二级域名,并不要求具有自己的DNS 服务器。
设置虚拟主机,只需要添加以下行到httpd.conf 文件,这个文件一般在/etc/httpd/conf/httpd.conf 可以找到。
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost *:80>
ServerName blog.example.com
DocumentRoot /var/www/html/blog
</VirtualHost>
剩下的工作就是去你的域名服务商处,设置DNS 解析,建立两个主机名,分别为www 与blog,指向的IP 相同,均为这台虚拟主机的IP 地址。这样就可以通过www.example.com 与blog.example.com 访问到同一台主机上的不同站点。
题外话:实现形入example.com 的解析,设置主机名为@ ,@ 代表域名自身。实现形入*.example.com 的解析,设置主机名为* 即可。