客户端请求的URL格式为:http://DNS:Port/......
经过很多中间过程,当该URL请求发送到Apache服务器时,Apache将转换为具体的“本机”路径。这是Apache的第一个基本功能:地址变换。
对于URL而言,每个必须指定 DNS+Port。
而对于Apache而言,内部通过<VirtualHost>其实又为每个DNS+Port组合对应了一个“本机”目录。
<VirtualHost *:8087> <IP : 端口>
ServerAdmin webmaster@G2.home
DocumentRoot "F:/Apache/docs" <本机路径>
ServerName G2.home <DNS>
ServerAlias www.G2.home
</VirtualHost>
将会形成如下对应数据表:
IP Port DNS 本机路径
A 192.168.0.1 80 W1 /D1
B 192.168.0.2 8087 W2 /D2
C 192.168.0.1 8087 Wx /Dx
D 192.168.0.1 80 Wy /Dy
这里有几点要注意:
1)如果没有指定port,那么表示缺省的80。无论是请求的URL还是<VirtualHost>中指定的值。
2)如果<VirtualHost>指定 *,那么查询时,对IP而言是匹配,对port而言则为80。
3)IP的用处主要是为了多IP的情况。
那么,查询该表即可知道URL对应的实际地址,存在如下三种情况:
1)如果通过IP可以识别最好;这就是多IP方案;
2)不行的话基本上通过一个IP+Port就可以知道URL;这就是单IP多端口方案;
3)如果IP+Port还存在重复的可能,那就就要结合DNS来使用;这就是虚拟主机名方案。
最浪费方式 - 多IP方式
一个Apache服务器可以对应多个IP,通过多个网卡或者一个网卡添加多个IP地址来实现。这样为每个域名对应一个IP即可。Eg:
|
<VirtualHost 192.168.0.1> ServerAdmin xxx@xxx.com DocumentRoot D:/S1 ServerName s1.com </VirtualHost> <VirtualHost 192.168.0.2> ServerAdmin xxx@xxx.com DocumentRoot D:/S2 ServerName s2.com </VirtualHost> |
IP多,Server配置多,Client访问简单,不需端口。 每个域名就是一个独立的IP+port,可以直接找到本机文件路径 可通过IP访问,域名随便填写,但是必须要有: 或通过域名访问,此时还是在Dsn服务器端将域名解析添加进来。局域网内部还可以通过机器名 eg:A+B |
最节省方式:一个IP多个端口
|
增加监听: Listen 80 Listen 81 <VirtualHost*> ServerAdmin xxx@xxx.com DocumentRoot D:/S1 ServerName s1 </VirtualHost> <VirtualHost*:81> ServerAdmin xxx@xxx.com DocumentRoot D:/S2 ServerName s2 </VirtualHost> |
Server简单一个IP;Client略显臃肿,需要在Url后面添加端口 每个域名是同一个IP的不同port,也可以直接找到本机文件路径。但是一定要利用listen使用指令来对用到的端口进行监听 如果当前IP为:192.168.01,最后通过如下访问: http://192.168.0.1/ http://192.168.0.1:81/ eg:A+C |
最优惠方式:同一IP多个域名
|
同一IP可能存在多个 NameVirtualHost* <VirtualHost*> ServerAdmin xxx@xxx.com DocumentRoot D:/S1 ServerName s1.com </VirtualHost> <VirtualHost*> ServerAdmin xxx@xxx.com DocumentRoot D:/S2 ServerName s2.com </VirtualHost> |
访问最简单,服务器配置最简单,域名即可 多个域名对应同一个IP和端口,存在冲突;此时必须用NameVirtualHost指令,对指定IP再根据域名来进行二级识别 如果当前IP为:192.168.01 最后通过如下访问: http://s1.com/ http://s2.com/ eg:A+D |
注意:上述只是简单的示意了站点,真正每个站点要发布,还要处理很多目录的访问权限。有时必须访问权限指定后才能进行访问。
浙公网安备 33010602011771号