• Apache的虚拟主机配置
    时间:2008-09-04   作者:佚名   出处:互联网

    虚拟主机配置

    首先用“记事本”程序打开“httpd.conf”配置文件。此文件存放在Apache服务器安装路径下的“conf”文件夹内。

    一、使用 mod_vhost_alias

    1.简单的动态虚拟主机

    (1)从 Host: 头中取得服务器名字 Server Name

    UseCanonicalName Off
    

    (2)这里的日志格式,可以在将来通过第一个参数域来分隔不同的虚拟主机的日志

    LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
    CustomLog logs/access_log vcommon
    

    (3)在返回请求的文件名的路径中包含进服务器名字: server name

    VirtualDocumentRoot /www/hosts/%0/docs
    VirtualScriptAlias /www/hosts/%0/cgi-bin
    

    2.更为有效的基于 IP 地址的虚拟主机

    (1)从 IP 地址反解析得到服务器名字(server name)

    UseCanonicalName DNS
    

    (2)在日志中包含 IP 地址,便于后续分发

    LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon
    CustomLog logs/access_log vcommon
    

    (3)在文件路径中包含 IP 地址

    VirtualDocumentRootIP /www/hosts/%0/docs
    VirtualScriptAliasIP /www/hosts/%0/cgi-bin
    

    二、使用 mod_rewrite

    1. 使用 mod_rewrite 实现简单的动态虚拟主机

    (1)从 Host: 头获取服务器名字

    UseCanonicalName Off
    

    (2)可分割的日志

    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>
    

    (3)接下来是关键部分

    RewriteEngine On
    a ServerName derived from a Host: header may be any case at all RewriteMap lowercase int:tolower
    

    首先处理普通文档:

    允许变名 /icons/ 起作用 - 其他变名类同
    RewriteCond %{REQUEST_URI} !^/icons/
    允许 CGIs
    RewriteCond %{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

    (1)vhost.map 文件包含了类似下面的内容:

    www.customer-1.com /www/customers/1
    www.customer-2.com /www/customers/2
    ...
    www.customer-N.com /www/customers/N
    

    (2)http.conf 包含了:

    RewriteEngine on
    RewriteMap lowercase int:tolower
    

    (3)定义映像文件

    RewriteMap vhost txt:/www/conf/vhost.map
    

    (4)和上面的例子一样,处理变名

    RewriteCond %{REQUEST_URI} !^/icons/
    RewriteCond %{REQUEST_URI} !^/cgi-bin/
    RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
    

    (5)这里做基于文件的重新映射

    RewriteCond ${vhost:%1} ^(/.*)$
    RewriteRule ^/(.*)$ %1/docs/$1
    RewriteCond %{REQUEST_URI} ^/cgi-bin/
    RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
    RewriteCond ${vhost:%1} ^(/.*)$
    RewriteRule ^/(.*)$ %1/cgi-bin/$1

    网友留言/评论

    我要留言/评论