Sto distribuendo Apache davanti a un'applicazione ospitata da Karaf (Apache e Karaf sono su server separati). Voglio che Apache funzioni come proxy inverso e anche per nascondere parte dell'URL.
L'URL per ottenere la pagina di accesso dell'applicazione direttamente dal server delle app è http://app-server:8181/jellyfish. Le pagine sono servite dall'istanza Jetty in esecuzione all'interno di Karaf. Naturalmente, questo comportamento verrebbe normalmente bloccato dal firewall per tutto tranne il server proxy inverso.
Con il firewall spento, se si preme questo URL, Jetty carica la pagina di accesso. La barra degli indirizzi del browser cambia correttamente http://app-server:8181/jellyfish/login?0e tutto funziona.
Quello che voglio è che http://web-server(cioè dalla radice) per mappare a Jetty sul server app con il nome dell'app ( jellyfish) soppresso. ad es. il browser cambierebbe per mostrarsi http://web-server/login?0nella barra degli indirizzi e tutti gli URL e i contenuti successivi sarebbero offerti con il dominio del web server e senza il jellyfishdisordine.
Posso far funzionare Apache come un semplice proxy inverso, usando la seguente configurazione (snippet): -
ProxyPass /jellyfish http://app-server:8181/jellyfish
ProxyPassReverse / http://app-server:8181/
... ma questo richiede che l'URL del browser contenga jellyfishe andando all'URL principale ( http://web-server) si ottenga un 404 Not Found.
Ho trascorso molto tempo cercando di usare mod_rewritecon e senza la sua [P]bandiera per aggirare questo, ma senza successo. Ho quindi provato la ProxyPassMatchdirettiva, ma non riesco nemmeno a capire bene.
Ecco la configurazione corrente, così come viene caricata /etc/apache2/sites-available/sul server web. Si noti che esiste una directory di immagini ospitata localmente. Ho anche mantenuto la protezione exploit proxy mod_rewrite e sto sopprimendo un paio di mod_securityregole che davano falsi positivi.
<VirtualHost *:80>
ServerAdmin admin@drummer-server
ServerName drummer-server
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /images/ "/var/www/images/"
RewriteEngine On
RewriteCond %{REQUEST_URI} !^$
RewriteCond %{REQUEST_URI} !^/
RewriteRule .* - [R=400,L]
ProxyPass /images !
ProxyPassMatch ^/(.*) http://granny-server:8181/jellyfish/$1
ProxyPassReverse / http://granny-server:8181/jellyfish
ProxyPreserveHost On
SecRuleRemoveById 981059 981060
<Directory "/var/www/images">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Se vado a http://web-server, vengo reindirizzato a http://web-server/jellyfish/homema questo dà un 404, con un reclamo sul tentativo di accedere /jellyfish/jellyfish/home- NB la barra degli indirizzi del browser non contiene il doppio /jellyfish.
HTTP ERROR 404
Problem accessing /jellyfish/jellyfish/home. Reason:
Not Found
E, se vado a http://web-server/login, vengo reindirizzato a http://web-server/jellyfish/login?0ma questo dà un 404, con una lamentela sul tentativo di accedere /jellyfish/jellyfish/login.
HTTP ERROR 404
Problem accessing /jellyfish/jellyfish/login. Reason:
Not Found
Quindi, immagino di dover in qualche modo passare attraverso le regole due volte. Sono anche leggermente confuso da dove homeprovenga il bit dell'URL nel primo esempio.
Qualcuno può indicarmi la giusta direzione, per favore?
Grazie J.
ProxyPassMatchcon un uso equivalentemod_rewrite, che affronta la sfida della rimozionejellyfishdagli URL. Sto ora esaminando un numero di 404 che poi si aprono per quanto riguarda gli elementi sottostanti come i componenti di Wicket richiesti da Karaf. Ecco uno snippet di codice:# proxy to the Jellyfish server (ignoring images) RewriteCond %{REQUEST_URI} !^/(images)(.*)$ RewriteRule ^(/.*)$ http://app-server:8181/jellyfish$1 [P] ProxyPassReverse / http://app-server:8181/jellyfish/