2012-03-20 15 views
13

Estoy heredando un proyecto que involucra una aplicación web de Java cuyo back-end está impulsado por un combo Apache httpd/Tomcat. El servidor web se utiliza para servir JS de vuelta, contenido estático y para realizar un balanceo de carga general, y Tomcat está devolviendo los JSP a través de un único archivo WAR.¿Cómo funcionan Apache httpd y Tomcat?

Recibiré acceso a la base de códigos más tarde hoy o mañana, pero quería intentar investigar un poco antes.

Mi pregunta se puede resumir como: ¿Cómo funcionan estas dos cosas juntas?

  • ¿Quién recibe primero las solicitudes HTTP?
  • ¿Cómo sabe httpd cuándo reenviar las solicitudes JSP a Tomcat, o simplemente responder a una solicitud?
  • ¿Cómo httpd "pasa" la solicitud ay "recibe" la respuesta de Tomcat? ¿Simplemente "copia y pega" la solicitud/respuesta a un puerto en el que está escuchando Tomcat? ¿Hay algún tipo de comunicación entre procesos en el sistema operativo? Etc.

Estas son solo preguntas generales sobre cómo las tecnologías colaboran entre sí. ¡Gracias por adelantado!

+0

A continuación, he publicado algunas respuestas, pero no me hubiera tomado * demasiado * mucho tiempo en detalles hasta que vea lo que realmente está mirando. Probablemente lo mejor es leer sobre los principios generales de los proxies inversos y tal (enlace en la respuesta). –

Respuesta

18

¿Quién recibe primero las solicitudes HTTP?

Apache, casi seguro. Sin embargo, podría haber procesos administrativos que hablen directamente con Tomcat.

¿Cómo sabe httpd cuándo reenviar las solicitudes JSP a Tomcat, o simplemente responder a una solicitud?

De su configuración. Los detalles variarán. Podría, por ejemplo, a utilizar mod_jk o mod_jk2, en cuyo caso se encontrará JkMount directivas en los archivos de configuración, por ejemplo:

JkMount /*.jsp ajp13_worker 

... que le dice a transmitir las peticiones en la raíz de la sitio para archivos que coincidan con *.jsp al ajp13_worker, que se define en el archivo workers.properties.

O podría configurarse en un simple acuerdo HTTP reverse-proxy. O algo mas.

¿Cómo "pasa" httpd la solicitud y "recibe" la respuesta de Tomcat?

Depende de la configuración; podría ser HTTP, podría ser AJP, o podría estar utilizando algún otro módulo.

¿Simplemente "copiar y pegar" la solicitud/respuesta a un puerto en el que está escuchando Tomcat?

Tipo de. :-) Vea el enlace de proxy inverso arriba.

¿Hay algún tipo de comunicación entre procesos en el sistema operativo?

Sí. AFAIK, todo está basado en socket (en lugar de, por ejemplo, cosas de memoria compartida), lo que significa (entre otras cosas) que Tomcat y Apache no necesitan ejecutarse en la misma máquina.

+0

digamos que una solicitud HTTP para contenido dinámico golpea a Apache. Apache genera un nuevo hilo, el hilo lo pasa a Tomcat, y posteriormente mata ese hilo (o lo devuelve al grupo). Al recibir la solicitud HTTP, Tomcat genera un nuevo hilo para manejar la solicitud. Luego, la respuesta fluye desde Tomcat, a Apache, al cliente. ¿Es eso cierto? –

Cuestiones relacionadas