虚拟主机详解:
本文试着来回答一些关于建立虚拟主机的一些常见问题,主要涉及如何在一台服务器上运行多个web 站点,通过基于域名,基于IP的实现
1.Running several name-based web sites on a single IP address(在只有一个IP地址的主机上运行多个基于域名的web站点)
你的服务器只有一个IP地址,而且通过域名解析是多个域名解析到服务器IP地址(DNS通过CNAME记录实现)你可以运行web 站点 www.example.com www.example.org 在你的服务器上
注意:这种实现,你必须使两个域名 www.example.com www.example.org 在公有的DNS服务器上有解析,解析到你服务器IP地址,
否则就没有人会访问到你的web 站点, 当然你也可以在本地的/etc/hosts
格式: Ip地址 www.example.com
Ip地址 www.example.org
用于本地测试,只用于那些在主机上有解析你的服务器地址的主机才可以访问到你的站点
配置如下:
***********************************************************
Server configuration
# Ensure that Apache listens on port 80
Listen 80
# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.example.com
# Other directives here
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /www/example2
ServerName www.example.org
# Other directives here
</VirtualHost>
***********************************************************
这种web 站点的搭建的一个特点:由于www.example.com 在出现在配置文件中的前面,所以它有较高的优先级,它被视为默认的web服务,这就意味这如果一个来自客户端的请求没有匹配任何配置好的域名,则它会被第一个虚拟主机所接受且响应
2.Name-based hosts on more than one IP address.
若服务器有两个IP地址,一个是172.20.30.40,我们可以服务于“main”
服务,一个是172.20.30.50,可以服务于两个或多个虚拟主机
配置如下:
***********************************************************
Server configuration
Listen 80
# This is the "main" server running on 172.20.30.40
ServerName server.domain.com
DocumentRoot /www/mainserver
# This is the other address
NameVirtualHost 172.20.30.50
<VirtualHost 172.20.30.50>
DocumentRoot /www/example1
ServerName www.example.com
# Other directives here ...
</VirtualHost>
<VirtualHost 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example.org
# Other directives here ...
</VirtualHost>
3.Serving the same content on different IP addresses
若服务器有两个IP地址(192.168.1.1 and 172.20.30.40),一个外网IP,一个内网IP,
向外,向内服务器宣告的域名相同,可同时响应来自内外网的web 请求
配置如下:
***********************************************************
Server configuration
NameVirtualHost 192.168.1.1
NameVirtualHost 172.20.30.40
<VirtualHost 192.168.1.1 172.20.30.40>
DocumentRoot /www/server1
ServerName server.example.com
ServerAlias server
</VirtualHost>
***********************************************************
4.Running different sites on different ports.
若你有多个域名解析到相同的IP的主机,你也可以通过多端口方式实现
配置如下
***********************************************************
Server configuration
Listen 80
Listen 8080
NameVirtualHost 172.20.30.40:80
NameVirtualHost 172.20.30.40:8080
<VirtualHost 172.20.30.40:80>
ServerName www.example.com
DocumentRoot /www/domain-80
</VirtualHost>
<VirtualHost 172.20.30.40:8080>
ServerName www.example.com
DocumentRoot /www/domain-8080
</VirtualHost>
<VirtualHost 172.20.30.40:80>
ServerName www.example.org
DocumentRoot /www/otherdomain-80
</VirtualHost>
<VirtualHost 172.20.30.40:8080>
ServerName www.example.org
DocumentRoot /www/otherdomain-8080
</VirtualHost>
***********************************************************
5.基于IP地址的虚拟主机
***********************************************************
Server configuration
Listen 80
<VirtualHost 172.20.30.40>
DocumentRoot /www/example1
ServerName www.example.com
</VirtualHost>
<VirtualHost 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example.org
</VirtualHost>
***********************************************************
6.基于端口与基于IP的混合
***********************************************************
Server configuration
Listen 80
<VirtualHost 172.20.30.40>
DocumentRoot /www/example1
ServerName www.example.com
</VirtualHost>
<VirtualHost 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example.org
</VirtualHost>
***********************************************************
7.基于域名与基于IP的混合
***********************************************************
Server configuration
Listen 80
NameVirtualHost 172.20.30.40
<VirtualHost 172.20.30.40>
DocumentRoot /www/example1
ServerName www.example.com
</VirtualHost>
<VirtualHost 172.20.30.40>
DocumentRoot /www/example2
ServerName www.example.org
</VirtualHost>
<VirtualHost 172.20.30.40>
DocumentRoot /www/example3
ServerName www.example3.net
</VirtualHost>
# IP-based
<VirtualHost 172.20.30.50>
DocumentRoot /www/example4
ServerName www.example4.edu
</VirtualHost>
<VirtualHost 172.20.30.60>
DocumentRoot /www/example5
ServerName www.example5.gov
</VirtualHost>
***********************************************************
8.基于域名的虚拟主机迁移到基于IP的虚拟主机的解决
基于域名的web 站点如:www.example.org 用户在访问时都是解析到IP地址才访问的
。经过一段时间后会有一些代理或者cache存储了老的IP地址,我们可以在基于虚拟主机下
添加IP地址来降低用户的访问失败
***********************************************************
Server configuration
Listen 80
ServerName www.example.com
DocumentRoot /www/example1
NameVirtualHost 172.20.30.40
<VirtualHost 172.20.30.40 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example.org
# ...
</VirtualHost>
<VirtualHost 172.20.30.40>
DocumentRoot /www/example3
ServerName www.example.net
ServerAlias *.example.net
# ...
</VirtualHost>
*********************************************************************************