apache - pass - ¿Cómo ejecutar PrimeFaces detrás del proxy inverso en un subdominio?
proxy pass apache2 (4)
Puede ser diferente dependiendo del servidor de la aplicación pero, como regla principal, debe usar AJP para el proxying.
El primer paso es habilitar los módulos ajp en función del sistema operativo. Ubuntu se ve así.
sudo a2enmod proxy proxy_ajp
Paso 2, cambie la definición del proxy en apache conf a algo como:
ProxyPass / ajp://localhost:8009/myapplication
ProxyPassReverse / ajp://localhost:8009/myapplication
El paso 3 es habilitarlo en el servidor de aplicaciones. Nuevamente, varía dependiendo del que use. Tomcat tiene una sección comentada en server.xml. Glassfish tiene una casilla de verificación en la consola de administración y un comando asadmin (pero no puedo recordarlo)
He creado una aplicación con PrimeFaces y quiero ejecutar eso detrás de un proxy inverso apache.
Mi URL de destino se ve así http://myserverurl.org:8080/myapplication/
.
Quiero acceder a la aplicación a través de un subdominio como este http://myapplication.myserverurl.org
.
He configurado un VirtualHost en apache:
<VirtualHost *:80>
ServerName myapplication.myserverurl.org
ProxyPass / http://myserverurl.org:8080/myapplication/
ProxyPassReverse / http://myserverurl.org:8080/myapplication/
</VirtualHost>
Eso no funciona tan bien. Puedo ver la página JSF, pero no hay CSS aplicado, etc. Puedo ver que la primera solicitud se redirige correctamente, pero las siguientes solicitudes (para cargar jQuery, CSS, etc.) no lo son.
Intentan acceder a una URL como http://myapplication.myserverurl.org/myapplication/faces/javax.faces.resource/primefaces.js?ln=primefaces
cual es obviamente incorrecto. No deben volver a incluir / myapplication / path, ya que el proxy redirige a esa ruta.
¿Cómo puedo resolver este problema? ¿Es este un problema de PrimeFaces o un problema con la configuración de mi proxy inverso?
El uso (o no uso) de AJP no influye en la resolución de este problema específico.
Primefaces internamente usa la variable de ruta de contexto para incluir recursos CSS y Javascript. Incluso usando AJP terminarás con:
/unwantedAppContext/javax.faces.resource/jquery/jquery.js.jsf?ln=primefaces
Lo que podría hacer para resolver esto, agregar otro pase de proxy para manejar el contexto no deseado. Esta puede no ser la mejor solución, pero funciona.
<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>
El orden del pase importa.
Este problema también se informó en el foro de icefaces http://www.icesoft.org/JForum/posts/list/4433.page#sthash.h1qSqiYg.dpbs
Considere usar la directiva ProxyHTMLURLMap del módulo mod_proxy_html. Este módulo manipula los enlaces HTML de salida para apuntar a la ubicación correcta. En su caso, todos los enlaces que le dicen a http://myapplication.myserverurl.org/
deben cambiarse a /, es decir,
ProxyHTMLURLMap http://myapplication.myserverurl.org/ /
De esta forma, puede modificar los enlaces de devolución de llamada que apuntan a una ubicación incorrecta.
La respuesta de jjhavokk funciona, pero para Graphics necesitas referenciarla a través de request.contextPath
<img src="#{request.contextPath}/resources/yourfolder/yourpng.png" />
Colóquelo en webapp / resources / yourfolder / yourpng.png Con mi archivo .css esto no era necesario
h:outputStylesheet name="css/screen.css"
en webapp / resources / css