Soy principalmente un desarrollador de Java, y llego a usted con una pregunta que se extiende entre la división entre los desarrolladores y los administradores de sistemas.
Hace años, cuando era algo novedoso ejecutar Tomcat como servidor de aplicaciones, era habitual enfrentarlo con Apache. Según tengo entendido, esto se hizo porque:
- Java se consideró "lento", y fue útil que Apache sirviera contenido estático directamente.
- Tomcat no podía escuchar los puertos 80/443 a menos que se ejecutara como root, lo cual era peligroso.
Java ya no se considera lento, y dudo que agregar Apache a la mezcla realmente ayude a acelerar las cosas.
En cuanto a la cuestión de los puertos, es probable que haya formas más sencillas de conectar servidores de aplicaciones a los puertos 80/443 en estos días.
Entonces mi pregunta es: ¿hay realmente algún beneficio al enfrentar Java Webapps con Apache en estos días? Si es así, ¿Apache sigue siendo el camino a seguir? ¿Debo mirar a Nginx? En lugar de Tomcat estoy usando Glassfish, si eso importa.
fuente
Depende del ecosistema alrededor de su aplicación. En un entorno de intranet, probablemente no necesite nada frente a Tomcat.
Si está solo en Internet como un servicio público, depende. Apache es bueno debido a los módulos que proporciona, como mod_security. Pero si no conoce la configuración de apache (o ngix), entonces podría exponerse a MÁS ataques o puntos de falla debido a una configuración incorrecta.
Apache en el frente es útil para servir páginas de interrupción en caso de que necesite actualizar la aplicación web y esperar un reinicio. Pero si los reinicios son raros o están sincronizados correctamente, entonces es otra razón para ir a Tomcat de forma independiente.
Las preguntas frecuentes de Tomcat también se refieren a esto, que aborda algunos puntos adicionales: http://wiki.apache.org/tomcat/FAQ/Connectors#Q3
fuente
Apache no es un buen candidato para servir contenido estático debido a su naturaleza multiproceso. Nginx se adapta mejor ya que usa E / S asíncronas para procesar solicitudes. Los Tomcats modernos también pueden usar E / S asíncronas (NIO en terminología de Java). Por ejemplo, debe instalar el
tomcat-native
paquete en Fedora para que Tomcat use E / S asíncrona.fuente
Sorprendente, algunas de estas respuestas: ¿alguna de ustedes maneja sitios web respaldados por Tomcat de múltiples niveles y múltiples servidores de alto rendimiento? OP, su suposición original de que Tomcat no es "lento" ... wow. El motor Tomcat es el talón de Aquiles de toda la ecosfera.
Sí, quiere Apache al frente: proporciona en primer lugar mod_rewrite (¿ya implementó UrlRewriteFilter en su Tomcat?), Así como los archivos htaccess que hacen que proteger un servidor web sea tan importante. Apache puede permitirle equilibrar la carga de los nodos de Tomcat detrás de él, servir su contenido estático mucho más rápido y obtener un mejor rendimiento de Tomcat porque no está sobrecargando su canal de solicitud con no Java (js / css / html / jpg / etc.) cosas. Puede descargar su SSL en Apache (si no está descargando en un LB de hardware) con facilidad y ni siquiera tiene que lidiar con esa parodia llamada Java Keystore. Hay tantas victorias: puede sintonizar mod_jk en sus nodos de back-end para evitar invadir el pobre cerebro de Java porque normalmente no puede manejar el tráfico masivo con el codificador promedio de Java '
Tenga cuidado con cualquiera que le diga que Apache (o nginx, etc., pero el rendimiento de Apache eclipsará a Tomcat de todos modos, así que no importa) no es una buena idea delante de Tomcat.
fuente
Si solo se trata de vincular el puerto de privilegios sin ser root cuando se usa Tomcat, no es necesario que lo enfrente con Apache httpd. Tomcat viene por defecto con lo
jsvc
que necesita compilar.jsvc
es un contenedor de servicios de Java para lanzar Tomcat como servicio. Este servicio comienza como root pero inicia Tomcat como un usuario normal. Para que pueda vincular su Tomcat a puertos privilegiados.No sé acerca de Glassfish, pero asegúrese de que existan soluciones y si no, seguramente puede usar técnicas de reenvío de puertos (iptables, etc.)
Creo que la elección de enfrentar un servidor de aplicaciones con un servidor web (Apache httpd, por ejemplo) es para equilibrar la carga, agrupar o servir recursos estáticos solo con un servidor web y recursos dinámicos con un servidor de aplicaciones.
fuente