首页 » 后端 » Apache » 正文

Apahe动态虚拟主机

发布者:站点默认
2011/01/21 浏览数(2,760) 分类:Apache Apahe动态虚拟主机已关闭评论

注:原文发布于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”:平滑重启,不影响其他人

<完>

点击返回顶部
  1. 留言
  2. 联系方式