如何配置apache虚拟主机
作者:佚名 时间:2012-05-22
1、简单的动态虚拟主机
# 从 host: 头中取得服务器名字 server name
usecanonicalname off
# 这里的日志格式,可以在将来通过第一个参数域来分隔不同的虚拟主机的日志
logformat "%v %h %l %u %t /"%r/" %s %b" vcommon
customlog logs/access_log vcommon
# 在返回请求的文件名的路径中包含进服务器名字: server name
virtualdocumentroot /www/hosts/%0/docs
virtualscriptalias /www/hosts/%0/cgi-bin
2、更为有效的基于 ip 地址的虚拟主机
# 从 ip 地址反解析得到服务器名字(server name)
usecanonicalname dns
# 在日志中包含 ip 地址,便于后续分发
logformat "%a %h %l %u %t /"%r/" %s %b" vcommon
customlog logs/access_log vcommon
# 在文件路径中包含 ip 地址
virtualdocumentrootip /www/hosts/%0/docs
virtualscriptaliasip /www/hosts/%0/cgi-bin
二、使用 mod_rewrite
1、使用 mod_rewrite 实现简单的动态虚拟主机
# 从 host: 头获取服务器名字
usecanonicalname off
# 可分割的日志
logformat "%{host}i %h %l %u %t /"%r/" %s %b" vcommon
customlog logs/access_log vcommon
<directory /www/hosts>
# execcgi is needed here because we can't force
# cgi execution in the way that scriptalias does
options followsymlinks execcgi
</directory>
# 接下来是关键部分
rewriteengine on
# a servername derived from a host: header may be any case at all rewritemap lowercase int:tolower
## 首先处理普通文档:
# 允许变名 /icons/ 起作用 - 其他变名类同
rewritecond %{request_uri} !^/icons/
# 允许 cgisrewritecond %{request_uri} !^/cgi-bin/
# 开始“变戏法”
rewriterule ^/(.*)$ /www/hosts/${lowercase:%{server_name}}/docs/$1
## 现在处理 cgis - 我们需要强制使用一个 mime 类型
rewritecond %{request_uri} ^/cgi-bin/
rewriterule ^/(.*)$ /www/hosts/${lowercase:%{server_name}}/cgi-bin/$1 [t=application/x-httpd-cgi]
# 好了!
2、使用独立的虚拟主机配置文件 vhost.map
vhost.map 文件包含了类似下面的内容:
www.customer-1.com /www/customers/1
www.customer-2.com /www/customers/2
# ...
www.customer-n.com /www/customers/n
http.conf 包含了:
rewriteengine on
rewritemap lowercase int:tolower
# 定义映像文件
rewritemap vhost txt:/www/conf/vhost.map
# 和上面的例子一样,处理变名
rewritecond %{request_uri} !^/icons/
rewritecond %{request_uri} !^/cgi-bin/
rewritecond ${lowercase:%{server_name}} ^(.+)$
# 这里做基于文件的重新映射
rewritecond ${vhost:%1} ^(/.*)$
rewriterule ^/(.*)$ %1/docs/$1
rewritecond %{request_uri} ^/cgi-bin/
rewritecond ${lowercase:%{server_name}} ^(.+)$
rewritecond ${vhost:%1} ^(/.*)$
rewriterule ^/(.*)$ %1/cgi-bin/$1