Problema, Domanda
Impostazione successiva: IHS Webserver con modulo Dispatcher configurato che a sua volta punta a una farm di rendering dell'app-server Websphere dove è in esecuzione un'istanza CQ. Una classe o uno script jsp in CQ chiama il metodo response.sendRedirect()
che si traduce in un reindirizzo sbagliato: il nome del server interno e la porta dell'app-server Websphere che non è raggiungibile dall'esterno è esposto nell'intestazione di risposta Posizione
che è usata per eseguire il reindirizzo.
La causa principale di questo problema è Websphere stesso in quanto l'implementazione IBM del metodo HttpServletResponse#sendRedirect()
è direttamente influenzata dalle intestazioni di richiesta personalizzate, generate per impostazione predefinita dal plugin IHS di Websphere. Questo è considerato un problema vendor lock-in di IBM.
Risoluzione, risposta
Utilizzando mod_headers
nel webserver IHS è possibile passare intestazioni specifiche di Websphere all'app-server aggiungendo tali intestazioni con la direttiva RequestHeader
. Inoltre, queste intestazioni personalizzate devono essere esplicitamente consentite nella configurazione del Dispatcher, altrimenti verranno ignorate.
Esempio:
- dominio pubblico: http://www.mydomain.com
Configurazione IHS
Modifica il file di configurazione httpd.conf
del server Web IHS e procedi come segue:
- assicurati che il modulo
mod_headers
sia presente e caricato - aggiungi intestazioni specifiche WAS utilizzando la direttiva
RequestHeader
Esempio (estratto da httpd.conf
):
... LoadModule headers_module modules/mod_headers.so ... <Directory /> <IfModule disp_apache2.c> # set custom Websphere headers RequestHeader set $WSSN www.mydomain.com RequestHeader set $WSSP 80 SetHandler dispatcher-handler </IfModule> Options FollowSymLinks </Directory>
Configurazione del Dispatcher
A livello di Dispatcher, è necessario aggiungere l'elenco delle intestazioni di richiesta configurate sopra all'elenco delle intestazioni client che il Dispatcher inoltrerà alla render farm definita, in questo caso l'app-server Websphere.
Esegui quanto segue:
- modifica il file di configurazione
dispatcher.any
- individua la sezione
/clientheaders
e aggiungi ulteriori intestazioni da includere - riavvia IHS
Esempio (estratto da dispatcher.any
):
... /clientheaders { ... "$WSSN" "$WSSP" } ...
Configurazione di Websphere
L'intestazione Websphere $WSSP
specifica la porta e $WSSN
definisce l'hostname da usare quando response.sendRedirect()
è chiamato in Websphere. Inoltre, la porta fornita nell'intestazione $WSSP
viene utilizzata anche per mappare l'host virtuale in Websphere.
Collegati alla console di amministrazione di Websphere e procedi come segue:
- vai a
Ambiente > Host virtuali
- seleziona la configurazione dell'host virtuale utilizzata per il CQ
- fai clic su
Alias degli host
- aggiungi porta
80
- riavvia Websphere se necessario
NOTA: potrebbe essere necessario aggiungere intestazioni più specifiche di Websphere, a seconda della configurazione. Fai riferimento a questo documento che descrive le intestazioni specifiche di Websphere e il loro significato.
Scarica
Accedi al tuo account