2012-10-30 22 views
7

Ho creato un'applicazione con PrimeFaces e voglio eseguirla dietro un proxy inverso di apache.Come eseguire PrimeFaces dietro proxy inverso in un sottodominio?

Il mio URL di destinazione è simile a questo http://myserverurl.org:8080/myapplication/.

Desidero accedere all'applicazione tramite sottodominio come questo http://myapplication.myserverurl.org.

Ho configurato un VirtualHost in Apache:

<VirtualHost *:80> 
    ServerName myapplication.myserverurl.org 
    ProxyPass/http://myserverurl.org:8080/myapplication/ 
    ProxyPassReverse/http://myserverurl.org:8080/myapplication/ 
</VirtualHost> 

che funziona, non così bene. Riesco a vedere la pagina JSF, ma non c'è nessun CSS applicato ecc. Posso vedere che la prima richiesta viene reindirizzata correttamente, ma le seguenti richieste (per caricare jQuery, CSS, ecc.) Non lo sono.

Provano ad accedere a un url come http://myapplication.myserverurl.org/myapplication/faces/javax.faces.resource/primefaces.js?ln=primefaces che è ovviamente sbagliato. Non devono includere nuovamente il percorso /myapplication/, poiché il proxy reindirizza già a quel percorso.

Come posso risolvere questo problema? Si tratta di un problema PrimeFaces o di un problema con la mia configurazione del proxy inverso?

risposta

0

Potrebbe essere diverso a seconda del server delle applicazioni ma, come regola principale, è necessario utilizzare AJP per il proxy.
Il primo passo è abilitare i moduli ajp in base al sistema operativo. Ubuntu sembra così.

sudo a2enmod proxy proxy_ajp 

Fase 2, modificare la definizione proxy nel conf apache a qualcosa di simile:

ProxyPass/ajp://localhost:8009/myapplication 
ProxyPassReverse/ajp://localhost:8009/myapplication 

Fase 3 è quello di consentire che sul server delle applicazioni. Di nuovo, varia a seconda di quello che usi. Tomcat ha una sezione commentata nel server.xml. Glassfish ha una casella di controllo nella console di amministrazione e un comando asadmin (ma non riesco a ricordarlo)

4

Utilizzare (o non utilizzare) AJP non ha alcun effetto sulla risoluzione di questo specifico problema.

Primefaces internamente utilizza la variabile del percorso di contesto per includere risorse CSS e Javascript. Anche usando AJP si finirà con:

/unwantedAppContext/javax.faces.resource/jquery/jquery.js.jsf?ln=primefaces

Che cosa si potrebbe fare per risolvere questo aggiungere un altro passaggio proxy per gestire il contesto indesiderato. Questa potrebbe non essere la soluzione migliore, ma funziona.

<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> 

L'ordine del passaggio è importante.

Questo problema è stato anche riportato nel forum ICEfaces http://www.icesoft.org/JForum/posts/list/4433.page#sthash.h1qSqiYg.dpbs

0

considerare l'utilizzo di ProxyHTMLURLMap direttiva dal modulo mod_proxy_html. Questo modulo manipola i link HTML di output per essere indirizzati alla giusta posizione. Nel tuo caso tutti i link che raccontano http://myapplication.myserverurl.org/ devono essere cambiati di nuovo a /, vale a dire

ProxyHTMLURLMap http://myapplication.myserverurl.org//

In questo modo è possibile modificare tutti i link di call-back che puntano a posizione errata.

+0

questo funziona per i link HTML, ma alcuni collegamenti sono generati attraverso il lato client JS e 'Pr oxyHTMLURLMap' non li risolve. – liadmat

0

risposta di opere jjhavokk ma per la grafica è necessario farvi riferimento tramite request.contextPath

<img src="#{request.contextPath}/resources/yourfolder/yourpng.png" /> 

posto in webapp/risorse/YourFolder/yourpng.png Con il mio file css questo non era necessario

h:outputStylesheet name="css/screen.css" 

in webapp/risorse/css