Pregunta

Tengo dos sitios web públicos (foo.com y bar.com) que se apuntó a un equilibrador de carga de hardware. Este hardware reenvía el tráfico a mi servidor de la siguiente manera:

http://foo.com ==> puerto 7700
https://foo.com ==> puerto 7701

http://bar.com ==> puerto 7800
https://bar.com ==> puerto 7801

Mi servidor es actualmente una vieja caja de iPlanet que define dos servidores virtuales (foo.com de 7700, 7701 y 7800 para bar.com, 7801). Dado que el equilibrador de carga hacia delante directamente a estos puertos, todo funciona bien.

Ahora necesito puerto de estos sitios web a una configuración de Apache 2.2 + JBoss 6.0, y estoy actualmente en una pérdida en cuanto a cuál es la mejor práctica consiste en lograr esto.

Ya ha configurado Apache para que escuche en mis cuatro puertos (7700,7701,7800, 7801) y SSL configurado para 7701,7801. Estoy asumiendo que es preferible dejar que Apache maneja los protocolos de enlace SSL y conexiones. He creado 4 entradas de host virtuales en Apache, de la siguiente manera:

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

He probado esto con contenido estático, y tanto los protocolos HTTP y HTTPS conexiones funcionan correctamente.

Para la configuración de mi JBoss, actualmente tengo mis aplicaciones implementadas como / foo y bar /, aunque no sé si eso debería ser la configuración final. Lo que quiero lograr es la siguiente:

Reenviar todo el tráfico desde 7700/7701 a http: // localhost: 8080 / foo , y desde 7800/7801 a http: // localhost: 8080 / barra de . Yo no quiero ver el / foo y bar / en la URL pública, sin embargo - el usuario sólo debe ver http://www.foo.com y http://www.bar .com .

¿Hay una manera de configurar mod_jk para reenviar solicitudes a una dirección URL específica? O debo buscar la manera de tener JBoss anfitrión foo.com en el puerto A y B bar.com en el puerto - y sólo tiene mod_jk adelante a cada puerto por separado

¿Fue útil?

Solución

creo mod_jk combinado con la reescritura de URL debe manejar lo que necesita. La información sobre los trabajadores mod_jk indica que debe ser capaz de utilizar mod_jk para transmitir las peticiones basados ??en URL utilizando el uriworkermap. También se ha mencionado que puede tener un uriworkermap separado para cada máquina virtual.

También me gustaría sugerir que usted echa un vistazo a mod_cluster - Podría haber adicional capacidades que podrían ayudar con esto.

Editar

Argh. Después de la aclaración (y algunos mejores excavación), creo que puede ser una respuesta diferente. Actualmente estoy usando ProxyPass / ProxyPassReverse para redirigir URL de nivel superior a los servlets individuales. He revisado el Apache VirtualHost docs de nuevo, y creo que Si lo combinas con mod_proxy, usted será capaz de obtener lo que desea.

Aquí hay un ejemplo de configuración propuesta que se basa en lo que tengo y podría cumplir con sus especificaciones:

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> 

Me disculpo por dejar pasar esta primera vez. La única cosa que usted querrá prueba es para asegurarse de que las direcciones URL de acceso servlet son correctos. El patrón que tengo en uso es http://{host}:{port}/{WARName}/{ServletPath}. Si ya ha probado la configuración con contenido estático, sólo debería ser necesario añadir / afinado la configuración del proxy. No estoy seguro de si será necesario las declaraciones Listen o no; Creo que se quiere, como los puertos no son estándar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top