2011-04-13 73 views
3

我已經通過mod_proxy使用Apache-Tomcat連接器配置了我的Web應用程序 - 請參見下文。如何在Apache-Tomcat Web應用程序中獲取瀏覽器URL?

<IfModule mod_proxy.c> 
ProxyPass /myapp http://127.0.0.1:8080/myapp 
ProxyPassReverse /myapp http://127.0.0.1:8080/myapp 
</IfModule> 

另外,我使用的子域,以便直接通過讀取URL識別客戶 - 請參見下面的例子。

客戶端1類型

http://client1.mydomain.com/myapp 

客戶端2類型

http://client2.mydomain.com/myapp 

現在,我想讀的URL,並解析客戶端名稱(客戶端1或客戶端2)。我的Web應用程序的其餘部分是基於客戶端是誰(當然,在認證之後)驅動的。但問題是,當我嘗試使用HttpServletRequest的getRequestURL獲取URL時,我得到http://127.0.0.1:8080/myapp而不是client1.mydomain或client2.mydomain。我想這是因爲Apache被用作主調度器,並且Apache httpd的請求被轉發到localhost Tomcat。

我不想更改URL的結構(如client1.mydomain.com/client1),也不想通過UI向用戶詢問客戶端信息。我如何實現這一目標?

回答

3

我通過使用AJP連接器而不是mod_proxy解決了這個問題。

<Location /myapp> 
ProxyPass ajp://localhost:8009/myapp 
ProxyPassReverse ajp://localhost:8009/myapp 
SetEnv force-proxy-request-1.0 1 
SetEnv proxy-nokeepalive 1 
</Location> 

AJP連接器從apache的轉發請求到Tomcat保留瀏覽器URL(而mod_proxy的改變了它到localhost:8080/MyApp的),因此我能夠讀取並從它解析客戶端名稱。

現在我可以渲染客戶端特定的數據,而不用實際提示用戶輸入他/她的客戶端名稱。

相關問題