2011-07-26 337 views
1

我一直在嘗試配置我的apache服務器來支持虛擬主機,這些主機然後會將任何在端口80發出的請求重定向到Jboss AS中託管的不同應用程序,所以例如我的配置就像這樣的:配置虛擬主機Apache

<VirtualHost *:80> 
ServerName www.testdomain.com 
ProxyPass/http://localhost:8080/contextPath 
ProxyPassReverse/http://localhost:8080/contextPath 
ProxyPreserveHost On 
ProxyPassReverseCookiePath// 

</VirtualHost> 

然而,問題是,當我試圖訪問http://www.testdomain.com,該URL被有效地重定向到本地主機:8080,但是,我有一個重複的上下文路徑。 I.E:http://www.testdomain.com/contextPath/contextPath

任何想法爲什麼會發生這種情況。非常感謝。

回答

1

您需要刪除「ProxyPass」和「ProxyPassReverse」條目,除非您真的試圖代理某些東西。如果jboss AS在另一臺服務器上,那麼你需要保留這些代理入口,但是在我看來,如果內容在一臺機器上而不是多臺機器上,你可能會使它變得非常困難。

如果您希望一臺服務器使用不同的基本文件夾作爲2個不同域的根目錄,則需要通過指定DocumentRoot參數來配置2個域。

例如,如果我想舉辦google.com和yahoo.com一臺計算機上,我的虛擬主機條目將包含:

<VirtualHost *:80> 
ServerName www.google.com 
DocumentRoot /var/www/Google 
</VirtualHost> 
<VirtualHost *:80> 
ServerName www.yahoo.com 
DocumentRoot /var/www/Yahoo 
</VirtualHost> 

然後,對每個服務器的根目錄會在谷歌文件夾和雅虎文件夾分別。

如果你想代理一個完全不同的機器,那麼下面應該工作:

<VirtualHost *:80> 
ServerName www.google.com 
ProxyPass/www.google.com 
</VirtualHost> 
<VirtualHost *:80> 
ServerName www.yahoo.com 
ProxyPass/www.yahoo.com 
</VirtualHost> 

您的條目專門針對沒有太大的意義。我想應該是這樣的:

<VirtualHost *:80> 
ServerName www.testdomain.com 
ProxyPass /contextPath http://localhost:8080 
ProxyPassReverse /contextPath http://localhost:8080 
</VirtualHost> 
2

我有同樣的問題,這是通過將forwardslashes到的URL解決。

ProxyPass/http://localhost:8080/contextPath/ 
ProxyPassReverse/http://localhost:8080/contextPath/ 

爲我解決了它!

單個虛擬主機文件的完整示例。我有幾個,每個域和子域一個。

ProxyRequests Off 
ProxyPreserveHost On 
<VirtualHost *:80> 
     ServerAdmin [email protected] 
     ServerName  enter.name.here 
     ProxyPass  /http://127.0.0.1:8080/<contextPath>/ 
     ProxyPassReverse/http://127.0.0.1:8080/<contextPath>/ 
     ErrorLog /var/log/apache2/somelog.log 
     CustomLog /var/log/apache2/somecustom.log common 
</VirtualHost>