Apache HTTP Server �汾2.2
���ĵ��������ʹ��Apache��Ч�ļ������������������
�����������ļ�httpd.conf
���������������<VirtualHost>
�Σ��������е����ݶ�������ͬ�Ļ�����Ӧ�û�����������ļ�������Ȥ�����磺
NameVirtualHost 111.22.33.44
<VirtualHost 111.22.33.44>
ServerName www.customer-1.com
DocumentRoot /www/hosts/www.customer-1.com/docs
ScriptAlias /cgi-bin/ /www/hosts/www.customer-1.com/cgi-bin
</VirtualHost>
<VirtualHost 111.22.33.44>
ServerName www.customer-2.com
DocumentRoot /www/hosts/www.customer-2.com/docs
ScriptAlias /cgi-bin/ /www/hosts/www.customer-2.com/cgi-bin
</VirtualHost>
# �� �� �� ������
<VirtualHost 111.22.33.44>
ServerName www.customer-N.com
DocumentRoot /www/hosts/www.customer-N.com/docs
ScriptAlias /cgi-bin/ /www/hosts/www.customer-N.com/cgi-bin
</VirtualHost>
�������˼�����ö�̬�Ļ�����ʵ��������Щ��̬��<VirtualHost>
���öΡ�������������ŵ㣺
��Ҫ��ȱ�����������ÿ����������ʹ�ò�ͬ����־�ļ���Ȼ�����������������д������������ķ������ϼ�¼��ͬ����־�ļ��Ļ������п��ܻ�ﵽ����ϵͳ�����������ļ������������������õİ취�ǰ���־д���ܵ����������ȳ���ջ�������������Ľ������ּ����õ�����־��Ϣ(ͬʱҲ������һЩ��ʷ��¼��ͳ�Ƶȵ�)��
һ�����������������������壺һ��������IP��ַ������һ����HTTP��"Host:
"����ͷ����̬�������������ļ������ǻ����Զ�����Ҫ���ص��ļ�·���в��������Ϣ���뷨ʵ�ֵġ�ʹ��mod_vhost_alias
���Ժ�����ʵ�֣���������Apache�汾����1.3.6 ���������ʹ��mod_rewrite
��������Ĭ������¶������ã�Ҫʹ�����ǣ����������úͱ���Apache�Ľ����á�
������Ҫ���ܶ�"αװ"������ʹ��̬������������������ͨ����������Ҫ��һ����Apacheʹ������������(ServerName)������������(self-referential)URL����Ϣ��������ServerName
ָ�������õģ����ҿ���ͨ����������SERVER_NAME
���ݸ�CGI�ű�������ʱʵ��ʹ�õ�ֵ����UseCanonicalName
ָ������������Ƶġ��� UseCanonicalName Off
ʱ������������(ServerName)ȡ�������е�"Host:
"ͷ���� UseCanonicalName DNS
ʱ����ͨ��DNS����������������IP��ַ�õ�����������ǰ�������ǻ������ƵĶ�̬�������������ڳ��û���IP��ַ���������������Apache���ж��������������������û��"Host:
"ͷ����DNS����ʧ�ܣ�����������£�Apache��ʹ������ServerName
ʱ����д����������
��һ����Ҫ"αװ"���������ĵ���Ŀ¼(��DocumentRoot
���ò�����ͨ��DOCUMENT_ROOT
��������ΪCGI�ű���ʹ��)����ͨ�������÷�ʽ�£���Щ������Ϣ�ɺ���(core)ģ���ڽ�URIӳ�䵽�ļ�ϵͳ��ʱ��ʹ�ã��������ʹ�ö�̬�����������ã���Щ��Ϣ��������һ��ʹ�ò�ͬ�ں���(core)ģ�齫URIӳ�䵽�ļ�ϵͳ�ķ�ʽ��ģ��(mod_vhost_alias
��mod_rewrite
)ʹ�á�������ģ�鶼����������DOCUMENT_ROOT
�����������������CGI��SSI����ʹ����DOCUMENT_ROOT
������������ô���õ������ֵ��
����httpd.conf
�ļ��У���ɺ����������������ᵽ����������һ��Ч�������÷����������������mod_vhost_alias
ģ�飺
# ��"Host:"ͷ��ȡ��������
UseCanonicalName Off
# ������־��ʽ���Դӵ�һ���ֶ�����ȡ��������
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon
# �ڷ���������ļ���·���а���������
VirtualDocumentRoot /www/hosts/%0/docs
VirtualScriptAlias /www/hosts/%0/cgi-bin
�� UseCanonicalName Off
�����ø�Ϊ UseCanonicalName DNS
����ʵ�ֻ���IP��ַ�����������������ļ�·������Ҫ����ķ���������ͨ������������IP��ַ�����õ���
����������ϵͳ����һ������������ΪISP�ĸ�����ҳ������������ʹ���������ӵķ�������������(ServerName)����ȡ���ַ����������뵽�ļ�·���С������������www.user.isp.com
���ĵ�����/home/user/
�ж�λ������������������ʹ�õ���cgi-bin
Ŀ¼��
# ����֮ǰ�������������һ����Ȼ�����ļ�·���а���������
VirtualDocumentRoot /www/hosts/%2/docs
# ����cgi-binĿ¼
ScriptAlias /cgi-bin/ /www/std-cgi/
�����ӵĹ���VirtualDocumentRoot
�����ã����Բ���mod_vhost_alias
�ĵ���
�����ӵ����ã�Ӧ��ʹ��Apache��<VirtualHost>
������������������������õ����������磬�������һ��IP��ַ����������ҳ�ͻ�ʹ�ã�ͬʱ������������ṩ����ҵ�ͻ�ʹ�á���Ȼ�ģ�������ͨ������<VirtualHost>
��ϵ�һ��
UseCanonicalName Off
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
<Directory /www/commercial>
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /www/homepages>
Options FollowSymLinks
AllowOverride None
</Directory>
<VirtualHost 111.22.33.44>
ServerName www.commercial.isp.com
CustomLog logs/access_log.commercial vcommon
VirtualDocumentRoot /www/commercial/%0/docs
VirtualScriptAlias /www/commercial/%0/cgi-bin
</VirtualHost>
<VirtualHost 111.22.33.45>
ServerName www.homepages.isp.com
CustomLog logs/access_log.homepages vcommon
VirtualDocumentRoot /www/homepages/%0/docs
ScriptAlias /cgi-bin/ /www/std-cgi/
</VirtualHost>
����һ��������˵����תΪ����IP��ַ�������������ú����������������ҵ��ǣ���������������Ч����Ϊ��������ÿ�δ�������ʱ����Ҫ��ѯDNS��ͨ�����ļ�ϵͳ�а���IP��ַ���������Ա������������⡣����һ������ȥ�˺��������Ĺ���������־��¼��Ҳһ��������IP�����벻ͬ��־��Apache������Ϊ��ȷ��������(ServerName)��ȥ��DNS��ѯ��
# ��IP��ַ�������õ�������
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_vhost_alias
���������ڰ汾1.3.6֮��ų��ֵġ������İ汾�Ƚ��ϣ�����ͨ��ʹ��mod_rewrite
���ﵽ��ͬ��Ŀ�ģ�������ʾ����ֻ���ǻ���"Host:"ͷ��ʽ������������
�����ע����־��������⡣Apache1.3.6�ǵ�һ��֧��"%V
"��־��ʽָ��İ汾���ڰ汾1.3.0-1.3.3�У�"%v
"ѡ������"%V
"һ�������飻���ڰ汾1.3.4��û�еȼ�ָ������е���Щ�汾�У�ָ��UseCanonicalName
���Գ�����.htaccess
�ļ��У�����ζ�ſͻ������ÿ��ܻᵼ����־��¼���ҡ�������õ�������ʹ��"%{Host}i
"ָ�������ֱ�Ӽ�¼"Host:
"ͷ��ע�⣬����������ĩβ����":port
"����ʹ��"%V
"��������
mod_rewrite
ʵ�ּĶ�̬�����������������ժ��httpd.conf
��Ч����ͬ����һ�������е������ǰ�벿�ֺ���������Ӵ������ƣ�ֻ��Ϊ��������mod_rewrite
�����ʵ��ģ���벿������mod_rewrite
����ʵ�ʵĹ�����
��Щ�ر�ĵط���Ҫע�⣺Ĭ������£�mod_rewrite
����������URIת��ģ��(mod_alias
��)֮ǰ���У��������ʹ����Щģ��Ļ���mod_rewrite
��������Ӧ�ĵ�����ͬʱ�����ǻ�ҪΪÿ����̬����������ЩϷ����ʹ֮��Ч��ScriptAlias
# ��"Host:"ͷ��ȡ������
UseCanonicalName Off
# �ɷּ����־
LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon
<Directory /www/hosts>
# ������ҪExecCGI ����Ϊ���Dz���ǿ��CGI����ScriptAlias��ͬ�ķ�ʽִ��
Options FollowSymLinks ExecCGI
</Directory>
# �������ǹؼ�����
RewriteEngine On
# ����"Host:"ͷ��ServerName �����ܴ�Сд����
RewriteMap lowercase int:tolower
## ���ȴ�����ͨ�ĵ�
# �������/icons/�����ã�����������ͬ
RewriteCond %{REQUEST_URI} !^/icons/
# ����CGI
RewriteCond %{REQUEST_URI} !^/cgi-bin/
# ��ʼ"��Ϸ��"
RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/docs/$1
## ���ڴ���CGI(������Ҫǿ��ʹ��һ��MIME����)
RewriteCond %{REQUEST_URI} ^/cgi-bin/
RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/cgi-bin/$1 [T=application/x-httpd-cgi]
# ok �ˣ�
mod_rewrite
�ĸ�����ҳϵͳ�����������ɺ��ڶ���������ͬ�Ĺ�����
RewriteEngine on
RewriteMap lowercase int:tolower
# ����CGI����
RewriteCond %{REQUEST_URI} !^/cgi-bin/
# ���hostname��ȷ���֮�����ʹRewriteRule������
RewriteCond ${lowercase:%{SERVER_NAME}} ^www\.[a-z-]+\.isp\.com$
# �����������������ӵ�URI�Ŀ�ͷ
# [C]����������д�Ľ��������һ��rewrite������ʹ��
RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C]
# ���ڴ���ʵ�ʵ��ļ���
RewriteRule ^www\.([a-z-]+)\.isp\.com/(.*) /home/$1/$2
# ����ȫ��CGIĿ¼
ScriptAlias /cgi-bin/ /www/std-cgi/
�����IJ���������mod_rewrite
�ĸ����ԣ��ڶ������������������ļ���ת������˿��Ը�Ϊ������Ҫ��Ϊ���ӵ����á�
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