fla*_*ash 8 apache subdomain reverse-proxy primefaces jsf-2
我已经使用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>
Run Code Online (Sandbox Code Playgroud)
效果不太好.我可以看到JSF页面,但没有应用CSS等.我可以看到第一个请求被正确重定向,但是以下请求(加载jQuery,CSS等)不是.
他们试图访问一个http://myapplication.myserverurl.org/myapplication/faces/javax.faces.resource/primefaces.js?ln=primefaces明显错误的网址.它们不能再次包含/ myapplication / path,因为代理已经重定向到该路径.
我该如何解决这个问题?这是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>
Run Code Online (Sandbox Code Playgroud)
通行证的顺序很重要.
冰面论坛http://www.icesoft.org/JForum/posts/list/4433.page#sthash.h1qSqiYg.dpbs也报道了这个问题 .
根据应用程序服务器的不同,它可能会有所不同,但作为主要规则,您应该使用 AJP 进行代理。
第一步是根据操作系统启用 ajp 模块。Ubuntu 看起来像这样。
sudo a2enmod proxy proxy_ajp
Run Code Online (Sandbox Code Playgroud)
步骤 2,将 apache conf 中的代理定义更改为:
ProxyPass / ajp://localhost:8009/myapplication
ProxyPassReverse / ajp://localhost:8009/myapplication
Run Code Online (Sandbox Code Playgroud)
第3步是在应用服务器上启用它。同样,它会根据您使用的不同而有所不同。Tomcat 在 server.xml 中有一个被注释掉的部分。Glassfish 在管理控制台中有一个复选框和一个 asadmin 命令(但我不记得了)