如何在子域中的反向代理后面运行PrimeFaces?

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问题还是我的反向代理配置问题?

jjh*_*okk 5

使用(或不使用)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也报道了这个问题 .


gre*_*ier 0

根据应用程序服务器的不同,它可能会有所不同,但作为主要规则,您应该使用 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 命令(但我不记得了)