如何在Apache-Tomcat Web应用程序中获取浏览器URL?

时间:2011-04-13 12:37:07

标签: url-rewriting apache httpd.conf mod-proxy tomcat

我已经通过mod_proxy使用Apache-Tomcat连接器配置了我的Web应用程序 - 见下文。

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

此外,我正在使用子域名,以便通过阅读URL直接识别客户端 - 请参阅下面的示例。

Client1类型

http://client1.mydomain.com/myapp

Client2类型

http://client2.mydomain.com/myapp

现在,我想读取URL并解析客户端名称(client1或client2)。我的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向用户询问客户端信息。我如何实现这一目标?

1 个答案:

答案 0 :(得分: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),因此我能够从中读取并解析客户端名称。

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