2011-04-13 76 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的),因此我能够读取并从它解析客户端名称。

现在我可以渲染客户端特定的数据,而不用实际提示用户输入他/她的客户端名称。

相关问题