我已经使用PrimeFaces构建了一个应用程序,并希望在apache反向代理后面运行该应用程序。
我的目标网址看起来像这个http://myserverurl.org:8080/myapplication/
。
我想通过像http://myapplication.myserverurl.org
这样的子域访问应用程序。
我已经在Apache中配置了VirtualHost:
<VirtualHost *:80>
ServerName myapplication.myserverurl.org
ProxyPass / http://myserverurl.org:8080/myapplication/
ProxyPassReverse / http://myserverurl.org:8080/myapplication/
</VirtualHost>
效果不是很好。我可以看到JSF页面,但是没有应用CSS等。我可以看到第一个请求已正确重定向,但随后的请求(用于加载jQuery,CSS等)却没有。
他们尝试访问类似
http://myapplication.myserverurl.org/myapplication/faces/javax.faces.resource/primefaces.js?ln=primefaces
的URL,这显然是错误的。它们不能再包含/myapplication/路径,因为代理已经重定向到该路径。我该如何解决这个问题?这是PrimeFaces问题还是我的反向代理配置问题?
最佳答案
使用(或不使用)AJP与解决此特定问题无关。
Primefaces内部使用上下文路径变量来包含CSS和Javascript资源。即使使用AJP,您最终也会得到:
/unwantedAppContext/javax.faces.resource/jquery/jquery.js.jsf?ln=primefaces
解决此问题的方法可以添加另一个代理处理,以处理不需要的上下文。这可能不是最好的解决方案,但它可以工作。
<VirtualHost *:80>
ServerName myapplication.myserverurl.org
ProxyPass /myapplication/ http://myserverurl.org:8080/myapplication/
ProxyPassReverse /myapplication/ http://myserverurl.org:8080/myapplication/
ProxyPass / http://myserverurl.org:8080/myapplication/
ProxyPassReverse / http://myserverurl.org:8080/myapplication/
</VirtualHost>
通行证的顺序很重要。
icefaces论坛中也报告了此问题
http://www.icesoft.org/JForum/posts/list/4433.page#sthash.h1qSqiYg.dpbs
关于apache - 如何在子域中的反向代理后面运行PrimeFaces?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13139319/