Apache-2.2

將 Apache Mass Virtual Hosts 配置到不同的目錄

  • May 17, 2012

我們的伺服器在埠 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是我們的客戶可以訪問託管在我們伺服器上的這個特定站點。

提前感謝您的幫助!

兩個問題:

  1. ServerAlias不支持與VirtualDocumentRoot- vhost 的別名設置為字面意思相同的變數%1.ourserver
  2. 您對新虛擬主機的聲明與指令不匹配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>

引用自:https://serverfault.com/questions/390093