Apache-2.2
將 Apache Mass Virtual Hosts 配置到不同的目錄
我們的伺服器在埠 9000 上執行 Apache(因為 IIS 在 80),我們有以下配置(vhosts.conf)來訪問我們的站點:
NameVirtualHost *:9000 UseCanonicalName Off <VirtualHost *:9000> ServerAlias %1.ourserver VirtualDocumentRoot D:/oursites/%1 VirtualScriptAlias D:/oursites/%1 </VirtualHost>
這樣我們就可以打開瀏覽器訪問了
http://someclient.ourserver:9000/
。到現在為止還挺好。現在我們正在安裝一個新伺服器,Apache 將在埠 80 上執行,但我們需要一個特定的站點具有
VirtualDocumentRoot
不同的驅動器/目錄。我們嘗試了這樣的事情(沒有成功):NameVirtualHost *:80 UseCanonicalName Off <VirtualHost specificsite.ourdomain.com:80> ServerAlias specificsite.ourdomain.com VirtualDocumentRoot C:/specificsite VirtualScriptAlias C:/specificsite </VirtualHost> <VirtualHost *:80> ServerAlias %1.ourserver VirtualDocumentRoot D:/oursites/%1 VirtualScriptAlias D:/oursites/%1 </VirtualHost>
當我們測試時,結果是,
http://specificsite.ourdomain.com/
在瀏覽器上訪問時,Apache 嘗試“重定向”到D:/oursites/specificsite
,這是不正確的。訪問
http://someclient.ourserver/
Apache會正確重定向到D:/oursites/someclient
.那麼我錯過了什麼?看起來我忘記了一個導致所有請求都落在第二個虛擬主機上的小細節。
更多資訊:
- 執行Xampp 1.7.7
- Windows Server 2008 R2與
- 關於 DNS 管理的兩個條目:一個用於 *.ourserver,另一個用於 specificsite.ourdomain.com;
- 使用的原因
specificsite.ourdomain.com
是我們的客戶可以訪問託管在我們伺服器上的這個特定站點。提前感謝您的幫助!
兩個問題:
ServerAlias
不支持與VirtualDocumentRoot
- vhost 的別名設置為字面意思相同的變數%1.ourserver
。- 您對新虛擬主機的聲明與指令不匹配
NameVirtualHost
,因此當請求進入該主機/埠組合時,不會對其進行檢查。它使用 DNS 來查找要綁定的地址,因此它沒有使動態虛擬主機離線這一事實意味著您的伺服器可能位於 NAT 後面。試試這個:
NameVirtualHost *:80 # Put this one's configuration first, so that it's the default. <VirtualHost *:80> # Add a ServerName directive so that it doesn't guess - it can be anything ServerName dynamic.filler.name ServerAlias *.ourserver VirtualDocumentRoot D:/oursites/%1 VirtualScriptAlias D:/oursites/%1 </VirtualHost> <VirtualHost *:80> ServerName specificsite.ourdomain.com VirtualDocumentRoot C:/specificsite VirtualScriptAlias C:/specificsite </VirtualHost>