配置內容:
...
Port 80
ServerName server.domain.tld
NameVirtualHost *
<VirtualHost *>
DocumentRoot /www/domain
ServerName www.domain.tld
...
</VirtualHost>
<VirtualHost *>
DocumentRoot /www/subdomain
ServerName www.sub.domain.tld
...
</VirtualHost>
「*」號代表所有本伺服器的所有IP地址,這樣虛擬主機就會代替主伺服器去監聽所有IP,由於我們將www.domain.tld的配置放在最前,所以www.domain.tld有最高優先權監聽請求,亦即成為了預設的虛擬主機。
配置內容:
...
Port 80
ServerName server.domain.tld
NameVirtualHost 111.22.33.44
<VirtualHost 111.22.33.44>
DocumentRoot /www/domain
ServerName www.domain.tld
...
</VirtualHost>
<VirtualHost 111.22.33.44>
DocumentRoot /www/subdomain
ServerName www.sub.domain.tld
...
</VirtualHost>
因為主伺服器沒有localhost以外的地址或連接埠,故主伺服器只需處理本主機的請求。同樣地,因為www.domain.tld的配置放在最前,故www.domain.tld虛擬主機就成為預設的伺服器。
配置內容:
...
Port 80
ServerName www.domain.tld
DocumentRoot /www/domain
NameVirtualHost 111.22.33.55
<VirtualHost 111.22.33.55>
DocumentRoot /www/otherdomain
ServerName www.otherdomain.tld
...
</VirtualHost>
<VirtualHost 111.22.33.55>
DocumentRoot /www/subdomain
ServerName www.sub.domain.tld
ServerAlias *.sub.domain.tld
...
</VirtualHost>
所有111.22.33.44的請求都會由主伺服器處理,111.22.33.55遇到無法解析的域名時就由www.otherdomain.tld處理。
利用虛擬主機設定指令,只需設定一次就能處理內部和外部的請求
配置內容:
...
NameVirtualHost 192.168.1.1
NameVirtualHost 111.22.33.55
<VirtualHost 192.168.1.1 111.22.33.55>
DocumentRoot /www/server1
ServerName server1.domain.tld
ServerAlias server1
...
</VirtualHost>
現在內外部的請求都由一個VirtualHost主機處理。
配置內容:
...
NameVirtualHost 111.22.33.44:80
NameVirtualHost 111.22.33.44:8080
<VirtualHost 111.22.33.44:80>
ServerName www.domain.tld
DocumentRoot /www/domain-80
</VirtualHost>
<VirtualHost 111.22.33.44:8080>
ServerName www.domain.tld
DocumentRoot /www/domain-8080
</VirtualHost>
<VirtualHost 111.22.33.44:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain-80
</VirtualHost>
<VirtualHost 111.22.33.44:8080>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain-8080
</VirtualHost>
配置內容:
...
Port 80
DocumentRoot /www/domain
ServerName www.domain.tld
<VirtualHost 111.22.33.55>
DocumentRoot /www/otherdomain
ServerName www.otherdomain.tld
...
</VirtualHost>
111.22.33.55的請求由www.otherdomain.tld處理,而111.22.33.44主伺服器的請求則由www.domain.tld處理。
配置內容:
...
Port 80
ServerName server.domain.tld
<VirtualHost 111.22.33.44>
DocumentRoot /www/domain
ServerName www.domain.tld
...
</VirtualHost>
<VirtualHost 111.22.33.55>
DocumentRoot /www/otherdomain
ServerName www.otherdomain.tld
...
</VirtualHost>
伺服器各個IP地址的請求都由 IP-based 虛擬主機處理。
配置內容:
...
Port 80
Listen 111.22.33.44:80
Listen 111.22.33.55:8080
ServerName server.domain.tld
<VirtualHost 111.22.33.44:80>
DocumentRoot /www/domain
ServerName www.domain.tld
...
</VirtualHost>
<VirtualHost 111.22.33.55:8080>
ServerName www-cache.domain.tld
...
<Directory proxy:>
Order Deny,Allow
Deny from all
Allow from 111.22.33
</Directory>
</VirtualHost>
除了localhost請求外,所有請求都有 IP-based 虛擬主機處理,透過 Port 80 就能連接到網頁伺服器;而透過 Port 8080 就能連接到代理伺服器。
配置內容:
...
Port 80
ServerName server.domain.tld
NameVirtualHost 111.22.33.44
<VirtualHost 111.22.33.44>
DocumentRoot /www/domain
ServerName www.domain.tld
...
</VirtualHost>
<VirtualHost 111.22.33.44>
DocumentRoot /www/subdomain1
ServerName www.sub1.domain.tld
...
</VirtualHost>
<VirtualHost 111.22.33.44>
DocumentRoot /www/subdomain2
ServerName www.sub2.domain.tld
...
</VirtualHost>
<VirtualHost 111.22.33.55>
DocumentRoot /www/otherdomain1
ServerName www.otherdomain1.tld
...
</VirtualHost>
<VirtualHost 111.22.33.66>
DocumentRoot /www/otherdomain2
ServerName www.otherdomain2.tld
...
</VirtualHost>
配置內容:
...
Listen 80
Listen 8080
ServerName www.domain.tld
DocumentRoot /www/domain
<VirtualHost 111.22.33.44:8080>
DocumentRoot /www/domain2
...
</VirtualHost>
在www.domain.tld上經 Port 80 的請求由主伺服器處理;經 Port 8080 的請求則由虛擬主機處理。
_default_ 虛擬主機配置內容:
... <VirtualHost _default_:*> DocumentRoot /www/default ... </VirtualHost>該設定會阻止主伺服器處理任何請求。
本預設的虛擬主機不會處理任何Name-based虛擬主機的請求。若該請求真的沒有任何主機名稱或連接埠號碼,則由第一項虛擬主機記錄處理該請求。
你亦可用AliasMatch或RewriteRule將所有請求導向至特定的網頁中。
_default_虛擬主機處理。
配置內容:
...
<VirtualHost _default_:80>
DocumentRoot /www/default80
...
</VirtualHost>
<VirtualHost _default_:*>
DocumentRoot /www/default
...
</VirtualHost>
所有IP的 Port 80 請求都會由第一個虛擬主機處理(必需在「*」虛擬主機設定之前),主伺服器將不會處理到任何請求。
配置內容:
...
<VirtualHost _default_:80>
DocumentRoot /www/default
...
</VirtualHost>
所有主機名稱不明的請求(Port 80)都會送至這虛擬主機處理。
配置內容:
...
Port 80
ServerName www.domain.tld
DocumentRoot /www/domain
NameVirtualHost 111.22.33.55
<VirtualHost 111.22.33.55 111.22.33.66>
DocumentRoot /www/otherdomain
ServerName www.otherdomain.tld
...
</VirtualHost>
<VirtualHost 111.22.33.55>
DocumentRoot /www/subdomain
ServerName www.sub.domain.tld
ServerAlias *.sub.domain.tld
...
</VirtualHost>
現在用戶端可經新的IP位址及舊的域名向你的Apache伺服器發出請求。
ServerPath 指令配置內容:
... NameVirtualHost 111.22.33.44 <VirtualHost 111.22.33.44> # primary vhost DocumentRoot /www/subdomain RewriteEngine On RewriteRule ^/.* /www/subdomain/index.html ... </VirtualHost> <VirtualHost 111.22.33.44> DocumentRoot /www/subdomain/sub1 ServerName www.sub1.domain.tld ServerPath /sub1/ RewriteEngine On RewriteRule ^(/sub1/.*) /www/subdomain$1 ... </VirtualHost> <VirtualHost 111.22.33.44> DocumentRoot /www/subdomain/sub2 ServerName www.sub2.domain.tld ServerPath /sub2/ RewriteEngine On RewriteRule ^(/sub2/.*) /www/subdomain$1 ... </VirtualHost>設定了ServerPath後,所有http://www.sub1.domain.tld/sub1/都會由sub1-虛擬主機處理。
只有在用戶端發送一正確的主機名稱 Header 時,http://www.sub1.domain.tld/請求才會由sub1-虛擬主機處理;若用戶端沒有發送該 Header 則由第一項虛擬主機處理。
這個例子有一個特殊之處:URL為http://www.sub2.domain.tld/sub1/而沒有 Header 的請求將由sub1-虛擬主機處理。
加入RewriteRule指令以確保有明確主機名稱的請求能使用兩種URL的對映方法。