2012-12-19 29 views
3

我有兩個網站在Apache服務器後面運行。在Apache中解析爲錯誤的VirtualHost的根請求

其中之一用於請求api.xyzzy.com

其他供應自帶的(幾十個域,子域等),因此是一個包羅萬象的通配符的任何其他業務。

用下面的配置,請求深層鏈接http://api.xyzzy.com/下...去到正確的虛擬主機(第一個),但頂級請求http://api.xyzzy.com/負載第二包羅萬象的通配符的虛擬主機來代替。

我在這裏做了什麼錯?

LoadModule passenger_module /home/webby/.rvm/gems/ruby-1.9.3-p286/gems/passenger-3.0.18/ext/apache2/mod_passenger.so 
PassengerRoot /home/webby/.rvm/gems/ruby-1.9.3-p286/gems/passenger-3.0.18 
PassengerRuby /home/webby/.rvm/wrappers/ruby-1.9.3-p286/ruby 

NameVirtualHost *:80 

<VirtualHost *:80> 
     ServerName api.xyzzy.com 
     ServerAlias api.xyzzy.com 
     RailsEnv production 
     DocumentRoot /home/webby/rails/current/public 
</VirtualHost> 

<VirtualHost *:80> 
     ServerAlias * 
     <Directory /usr/local/xyzzy/webapps/wwwroot > 
       Options Indexes MultiViews 
       AllowOverride None 
       Order allow,deny 
       Allow from all 
     </Directory> 
     DocumentRoot /usr/local/xyzzy/webapps/wwwroot 
</VirtualHost> 

UPDATE:

下面的配置似乎是工作爲現在的預期。這是基於@ Winfield的回答。

看來我的測試可能是錯誤的。我的瀏覽器(Chrome)可能會自動填寫我輸入的地址,並且使用https(而不是http)前綴。不幸的是,我沒有注意到這個異常,直到嘗試了幾十個配置的排列之後,很難說出最終的正確解決方案。我應該在命令行上使用curl進行更可靠的測試,而不是在瀏覽器欄中輸入內容。

<VirtualHost *:80> 
     <Directory /usr/local/xyzzy/webapps/wwwroot > 
       Options Indexes MultiViews 
       AllowOverride None 
       Order allow,deny 
       Allow from all 
     </Directory> 
     DocumentRoot /usr/local/xyzzy/webapps/wwwroot 
</VirtualHost> 

<VirtualHost *:80> 
     ServerAlias api.xyzzy.com 
     RailsEnv production 
     DocumentRoot /home/webby/rails/current/public 
</VirtualHost> 
+0

您是否有任何NameVirtualHost指令?因爲我沒有看到Apache會如何(或爲什麼)以不同的方式對待它們... –

+0

是的另一個conf文件定義:$ grep NameV * .conf ports.conf:NameVirtualHost *:80 –

+0

好吧,但我仍然沒有得到你在做什麼。 VirtualHosts的命名都是一樣的嗎?爲什麼第二個存在? –

回答

2

我認爲你最好使用「默認」虛擬主機(第一定義)來解決這個不是一個通配符的虛擬主機。您可以交換訂單並填寫正確的服務器名稱。這應該使非AP​​I主機名訪問默認(第一個)虛擬主機以及任何與主機名匹配的API來點擊API虛擬主機。像這樣:

<VirtualHost *:80> 
     ServerName www.xyzzy.com 
     ServerAlias xyzzy.com 
     <Directory /usr/local/xyzzy/webapps/wwwroot > 
       Options Indexes MultiViews 
       AllowOverride None 
       Order allow,deny 
       Allow from all 
     </Directory> 
     DocumentRoot /usr/local/xyzzy/webapps/wwwroot 
</VirtualHost> 

<VirtualHost *:80> 
     ServerName api.xyzzy.com 
     ServerAlias api.xyzzy.com 
     RailsEnv production 
     DocumentRoot /home/webby/rails/current/public 
</VirtualHost> 
+0

非api虛擬主機需要捕獲到服務器的每個域(它們並非都是xyzzy.com),這就是爲什麼我將它作爲通配符的原因。按照您在這裏所做的那樣交換訂單,導致非api虛擬主機也開始捕獲並提供api子域請求。 –