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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top