注:原文发布于QQ空间,在upall对“集装袋”进行SEO时转载至网易博客,最近看到本文被转载多次,但文章中的部分错误都未修正,所以本文重新整理后再次发布。[12:47 2011年1月21日 星期五]
导读:
本文分三部分“简单例子”、“参数讲解”、“具体操作”。
简单例子:
在httpd.conf文件中添加:
1.对于一个简单的基于名称的虚拟主机,配置文件(httpd.conf)为:
UseCanonicalName off VirtualDocumentRoot /var/www/%1/%p VirtualScriptAlias /var/www/%1/%2/%3/%4/cgi-bin
说明:访问“:443”将会定位到“/var/www/blog/443
2.对于基于IP地址的虚拟主机,可以这样配置:
UseCanonicalName DNS VirtualDocumentRootIP /var/www/%1/%2/%3/%4/docs VirtualScriptAliasIP /var/www/%1/%2/%3/%4/cgi-bin
说明:访问“http://123.132.213.231”将会定位到“/var/www/123/132/213/231
参数讲解:
一、UseCanonicalName指令
语法:UseCanonicalName On | Off | DNS
默认:UseCanonicalName Off
这个指令用来构造Apache的自引用URL(一个指回相同服务器的URL)。
UseCanonicalName on:
会将ServerName设置的域名用于所有的自引用URL、SERVER_NAME、CGI中的SERVER_PORT。比如:如果你的web服务器有自己的域名,并且在DNS中有对应的NS记录,而且httpd.conf将ServerName设置了域名,那么你在浏览器中输入http://192.168.120.240/bbs,它会自动将这个IP地址变成其对应的域名,比如http://www.bob.com/bbs/ 。此时,如果其他客户端的电脑不能正确的解析web服务器的这个域名,那么在访问这个web服务器时将会出现问题。因为web服务器会自动将IP地址转变成域名。
UseCanonicalName Off:
如果客户端提供了主机名和端口,Apache将会使用客户端提供的这些信息来构建自引用URL。这些值与用于实现基于域名的虚拟主机的值相同,并且对于同样的客户端可用。CGI变量SERVER_NAME和SERVER_PORT也会由客户端提供的值来构建。
UseCanonicalName DNS:
本设置用于为大量基于IP的虚拟主机支持那些不提供“Host:“头的浏览器使用。使用这个选项时,Apache将对客户端连入的服务器的IP地址进行DNS反向解析,以构建自引用URL。
二、VirtualDocumentRoot指令和VirtualDocumentRootIP指令
说明:对于给定的基于名称的虚拟主机动态配置根文档目录
语法:VirtualDocumentRoot[IP] interpolated-directory|none
默认:VirtualDocumentRoot[IP] none
例子:VirtualDocumentRoot[IP] /var/www/%3+/%2.-1/%2.-2/%2.-3/%2
本模块中的所有指令都用于将字符串替换为路径名。被替换的字符串(以后称为”name”)可以是服务器名(参见UseCanonicalName指令以了解决策方法)或者是”点数字”格式的虚拟主机IP地址。替换操作由printf格式修饰符控制,该修饰符有以下几种格式:
%% 插入一个百分号(%)
%p 插入虚拟主机的端口号
%N.M 插入名称(或者名称的一部分)
N和M被用来指定name中的子字符串。N从name中用小数点分隔的某部分中选取,而M是从N选中的字符串中选取部分字符。M是可选的且默认为”0″;小数点当且仅当M存在时才必须书写。替换操作如下:
0 整个name
1 第一部分
2 第二部分
-1 最后一部分
-2 倒数第二部分
2+ 从第二部分开始到最后的所有部分
-2+ 倒数第二部分以及之前的各部分
1+和-1+ 等同于0
提示:如果N或M大于部分的个数,则简单的用下划线来替换。
例子:
中
“%0”为“blog.upall.cn”,
“%1”为“blog”,
“%2”为“upall”,
“%2+”为“upall.cn”,
“%-1”为“cn”,
“-2”为“upall”,
“-2+”为“blog.upall”,
“-2”为“upall”。
提示:如果你希望在VirtualDocumentRoot指令中包含点字符(.),但这又和%指令产生冲突,可以这样解决:
VirtualDocumentRoot /var/www/%2.0.%3.0
对http://blog.other.upall.cn/index.html的请求将会返回文件/var/www/other.upall/index.html
三、VirtualScriptAlias 指令和VirtualScriptAliasIP 指令
说明:对于给定的基于名称的虚拟主机动态配置CGI目录
语法:VirtualScriptAlias interpolated-directory|none
默认:VirtualScriptAlias none
说明:“%N”的设置请参考上文“二、VirtualDocumentRoot指令和VirtualDocumentRootIP指令”。
具体操作:
Step1:在“httpd.conf”中添加这两行:
提示:最好放到“# Virtual hosts”后边,以区别普通的虚拟主机。
# Virtual hosts Alias Include conf/extra/httpd-vhosts-alias.conf # 此文件位于“..apache\Apache2.2.11\conf\extra\”。
Step2:编辑“httpd-vhosts-alias.conf”文件:
提示:这个文件要自己创建。
UseCanonicalName off VirtualDocumentRoot /var/www/%1
说明:“%1”对应的目录请事先创建好。
Step3:记录日志:
提示:估计只能把日志写入一个文件了,而不能一主机一日志。。
修改配置文件中相应位置为:“LogFormat “%V %h %l %u …”,其中“%V”是新加入的,用于在日志中写入所访问的虚拟主机。
Step4:重启Apahe:
httpd.exe -k restart # “-k restart”:tell running Apache to do a graceful restart # “-k restart”:平滑重启,不影响其他人
<完>