通过mod_proxy时,会话属性不再有效

时间:2012-06-05 06:48:29

标签: tomcat apache2 tomcat6 mod-proxy apache2-module

我有一个运行在“http:// localhost:8080 / appexploded / login.jsp”(Tomcat)上的tomcat应用程序。现在我已经安装了Apache并且正在运行mod_proxy,以便端口80上的所有请求都可以代理到8080.在我的httpd.conf文件中,这是我所拥有的:

LoadModule proxy_module  /usr/lib/apache2/modules/mod_proxy.so

ProxyPass         /ordergeek  http://localhost:8080/appexploded
ProxyPassReverse  /ordergeek  http://localhost:8080/appexploded 

因此,当我直接向:8080发出请求时,我的request.getSession()。getAttribute(“BLAH”)从一个页面到另一个页面。但是,当我转到“http://localhost/ordergeek/login.jsp”时,该页面会设置会话属性,然后重定向到另一个页面。但是,下一页尝试读取request.getSession()。getAttribute(“BLAH”),但它找不到它。

当我不通过代理时......会话属性有效。当我通过代理时,他们没有。我错过了什么?

我在服务器端添加了以下内容:

<Connector port="8080" 
          proxyName="www.myappurl.com"
          proxyPort="80"/>

2 个答案:

答案 0 :(得分:2)

这是一个旧的,但由于这个主题出现在第一个谷歌搜索结果中,而我在其他地方几乎找不到答案,这可能会有所帮助:

您只需要添加ProxyPassReverseCookiePath指令,以便在Cookie中更正路径:

ProxyPassReverseCookiePath /appexploded /ordergeek  

设置完成后,您应该像往常一样获取会话属性。

请注意,您必须使用Apache 2.2或更高版本。

答案 1 :(得分:0)

当Apache HTTPD在路径中时,很难更改Web应用程序名称。您不仅要使用ProxyPassReverse,还要翻译所有传出的HTML以重写应用程序放置在那里的任何链接。有一个第三方mod_proxy_html模块可以做到这一点,但你应该重新考虑整个策略。恕我直言重写HTML是问题的一部分,而不是解决方案的一部分。只需在Tomcat内部重命名您的Web应用程序。