Percorso a due domini stessa istanza di JBoss
Domanda
Ho due siti web pubblici (foo.com e bar.com) che sono indicò un bilanciamento del carico hardware. Questo hardware inoltra il traffico al mio server come segue:
http://foo.com ==> porta 7700
https://foo.com ==> porta 7701
http://bar.com ==> porta 7800
https://bar.com ==> porta 7801
Il mio server è attualmente una vecchia scatola iPlanet che definisce due server virtuali (foo.com per 7700, 7701 e 7800 per bar.com, 7801). Poiché il bilanciamento del carico in avanti direttamente queste porte, tutto funziona correttamente.
Ora devo porto questi sito web per una configurazione di Apache 2.2 + JBoss 6.0, e sono attualmente in perdita quanto a che cosa è la migliore pratica per raggiungere questo obiettivo.
Ho già configurato Apache per ascoltare le mie quattro porte (7700,7701,7800, 7801) e SSL configurato per 7701,7801. Sto assumendo si preferisce lasciare Apache gestire le strette di mano SSL e le connessioni. Ho creato 4 voci Virtual Host in Apache, come segue:
<VirtualHost *:7700>
DocumentRoot "/htdocs/foo.com"
ServerName foo.com
</VirtualHost>
<VirtualHost *:7701>
DocumentRoot "/htdocs/foo.com"
ServerName foo.com
SSLEngine on
SSLCipherSuite ALL:...
SSLCertificateFile "/cert/foo.com.crt"
SSLCertificateKeyFile "/cert/foo.com.key"
</VirtualHost>
<VirtualHost *:7800>
DocumentRoot "/htdocs/bar.com"
ServerName bar.com
</VirtualHost>
<VirtualHost *:7801>
DocumentRoot "/htdocs/bar.com"
ServerName bar.com
SSLEngine on
SSLCipherSuite ALL:...
SSLCertificateFile "/cert/bar.com.crt"
SSLCertificateKeyFile "/cert/bar.com.key"
</VirtualHost>
Ho provato questo con contenuti statici, e sia la connessioni HTTP e HTTPS funzionano correttamente.
Per la mia configurazione di JBoss, Al momento ho le mie applicazioni distribuite come / foo e / bar, anche se non so se che dovrebbe essere la configurazione finale. Quello che voglio realizzare è questo:
Inoltra tutto il traffico da 7700/7701 a http: // localhost: 8080 / foo , e dal 7800/7801 al http: // localhost: 8080 / bar . Non voglio vedere la / foo e / bar nella URL pubblico, anche se - l'utente deve solo vedere http://www.foo.com e http://www.bar .com .
C'è un modo per configurare mod_jk per inoltrare le richieste a un URL specifico? O dovrei essere alla ricerca di nuovi modi per avere JBoss ospite foo.com sulla porta A e bar.com sulla porta B -? E solo mod_jk l'ora di ciascuna porta separatamente
Soluzione
Credo mod_jk
combinato con la riscrittura degli URL dovrebbe gestire quello che ti serve. Le informazioni mod_jk
sui lavoratori indica che si dovrebbe essere in grado di utilizzare mod_jk per trasmettere le richieste basate su URL utilizzando l'uriworkermap. E 'anche detto che si può avere un uriworkermap separato per ogni host virtuale.
Mi piacerebbe anche come a suggerire che si dà un'occhiata al mod_cluster
- potrebbe avere ulteriore capacità che sarebbero aiutare con questo.
Modifica
Argh. Dopo il chiarimento (e un po 'meglio di scavo), penso che ci possa essere una risposta diversa. Attualmente sto usando ProxyPass
/ ProxyPassReverse
per reindirizzare gli URL di primo livello ai singoli servlet. Ho rivisto di nuovo la Apache VirtualHost docs , e penso che se si combinano con mod_proxy
, sarete in grado di ottenere quello che vuoi.
Ecco un esempio di configurazione proposta che si basa su quello che ho potuto e soddisfare le vostre specifiche:
Listen 7700
Listen 7701
Listen 7800
Listen 7801
<VirtualHost *:7700>
ProxyPreserveHost On
ProxyPass / http://localhost:8080/foo
ProxyPassReverse / http://localhost:8080/foo
ServerName foo.com
</VirtualHost>
<VirtualHost *:7701>
ProxyPreserveHost On
ProxyPass / http://localhost:8080/foo
ProxyPassReverse / http://localhost:8080/foo
ServerName foo.com
SSLEngine on
SSLCipherSuite ALL:...
SSLCertificateFile "/cert/foo.com.crt"
SSLCertificateKeyFile "/cert/foo.com.key"
</VirtualHost>
<VirtualHost *:7800>
ProxyPreserveHost On
ProxyPass / http://localhost:8080/foo
ProxyPassReverse / http://localhost:8080/foo
ServerName bar.com
</VirtualHost>
<VirtualHost *:7801>
ProxyPreserveHost On
ProxyPass / http://localhost:8080/foo
ProxyPassReverse / http://localhost:8080/foo
ServerName bar.com
SSLEngine on
SSLCipherSuite ALL:...
SSLCertificateFile "/cert/bar.com.crt"
SSLCertificateKeyFile "/cert/bar.com.key"
</VirtualHost>
mi scuso per la mancanza questa la prima volta. L'unica cosa che si vorrà test è quello di fare in modo che gli URL per l'accesso servlet siano corrette. Il modello che ho in uso è http://{host}:{port}/{WARName}/{ServletPath}
. Se hai già provato la configurazione con contenuti statici, solo la configurazione di proxy dovrebbe essere necessario aggiungere / accordato. Non sono sicuro se sarà necessario leggere le normative Listen
o no; Credo che si vuole, come le porte non sono standard.