我遇到了一个由JBoss提供的Java应用程序的奇怪(对我而言)。
- 背景 -
1) JBoss安装在Linux环境中。
为了便于说明,我环境中的IP地址是:99.999.999.99
2) 在环境中,我运行JBoss:http://127.0.0.1:8080
可以通过以下方式访问多个应用程序:http://127.0.0.1:8080/APPLICATION_NAME
3) 我有apache路由流量到我的IP地址,如下所示:
ProxyPass / http://127.0.0.1:8080/app1/
ProxyPassReverse / http://127.0.0.1:8080/app1/
ProxyPass /app2/ http://127.0.0.1:8080/app2/
ProxyPassReverse /app2/ http://127.0.0.1:8080/app2/
ProxyPass /app3/ http://127.0.0.1:8080/app3/
ProxyPassReverse /app3/ http://127.0.0.1:8080/app3/
4) 当我访问99.999.999.99时,我能够访问app1,它按预期运行(除了下面的问题)。
当我访问99.999.999.99/app2时,我可以访问app2。
- 问题 -
1) 在app1里面,我有一个写入会话的jsp页面:
_sessionTest1.jsp session.setAttribute(“test”,“test”);
2) 问题是在运行此JSP之后,会话将不包含已设置的数据。
3) 如果我删除了apache代理,而是公开JBoss root 管理链接和JMX控制台,会话将按预期更新。
以这种方式配置时,我访问应用程序的方式是:
99.999.999.99/app1
99.999.999.99将显示我的JBoss root。
4) 如果按上述配置,是否应该无法访问应用程序的会话?
谢谢!
答案 0 :(得分:1)
原来问题是apache需要配置为从cookie中查找会话信息,而不是默认的URL。
答案 1 :(得分:1)
我在Apache代理Jetty时遇到了同样的问题。规则是:
ProxyPass /myapp http://localhost:8080
ProxyPassReverse /myapp http://localhost:8080
将https://myhost/myapp
代理到http://localhost:8080
。这一般起作用,但myapp中的会话未在请求之间保留。添加以下规则修复了它:
ProxyPassReverseCookiePath / /myapp
答案 2 :(得分:0)
我相信你的第一个代理声明实际上应该是你的最后一个。 Apache将停在匹配URL的第一个规则,因此通过Web服务器的所有请求都将使用泛型/捕获规则1。
ProxyPass /app1/ http://127.0.0.1:8080/app1/
ProxyPassReverse /app1/ http://127.0.0.1:8080/app1/
ProxyPass /app2/ http://127.0.0.1:8080/app2/
ProxyPassReverse /app2/ http://127.0.0.1:8080/app2/
ProxyPass /app3/ http://127.0.0.1:8080/app3/
ProxyPassReverse /app3/ http://127.0.0.1:8080/app3/
ProxyPass / http://127.0.0.1:8080/app1/
ProxyPassReverse / http://127.0.0.1:8080/app1/