¿Por qué es tan complejo el servidor HTTP Apache?

14

El servidor HTTP Apache es un proyecto bastante grande, mucho mayor que, por ejemplo, lighthttpo nginx, o, sin duda los "servidores HTTP simples" Ves que circulan en C / C ++ tutoriales.

¿Para qué sirve el código extra? ¿Agrega seguridad / estabilidad (y si es así, cómo?) O es solo para hacer cosas como analizar confarchivos Apache / .htaccessescribir cosas (y, supongo, VirtualHostsetc.).

Pido no criticar a Apache, sino porque estoy interesado en escribir un tipo de servidor web y me gustaría saber cosas que, aunque quizás no sean obvias, es importante recordar para un servidor web seguro, estable y rápido.

Aaron Yodaiken
fuente
Ayuda a eliminar a todos aquellos que no empacan el equipo para manejarlo.
Joel Etherton
66
No es una respuesta real, pero escuché que el nombre proviene del hecho de que tuvo muchos contribuyentes incluso al principio del desarrollo. Se contribuyeron muchos parches, lo que lo convierte en un servidor irregular. Historia verdadera.
Jeremy
+1 @ Joel Etherton: Buena historia, especialmente que es verdad. Pero nunca dejar que el get verdad en el camino de una buena historia :)
therobyouknow
+1 @aharon para ver un ejemplo de cuestionamiento del status quo. ¿Pero "escribir un servidor web"? ¿No estamos reinventando la rueda aquí cuando hay muchas ofertas además de Apache?
therobyouknow

Respuestas:

20

Es mucho más complejo porque:

Pero también:

  • Está más activamente desarrollado ( Comparación de estado . A partir de hoy 28/05/2011, Apache httpd tiene la actualización más reciente, aunque su proceso de lanzamiento inherente debería verse obstaculizado por su complejidad extendida en comparación con sus competidores).

Dicho esto, la respuesta de R. contiene puntos válidos sobre su arquitectura y por qué algunos otros servidores web también se benefician de la fama relativa. Depende de lo que quieras.

También puede consultar /programming/475386/apache-vs-nginx-vs-lighttpd-which-is-simpler-to-configure-and-administer para obtener más material. Aunque no responde directamente a su pregunta, todo el hilo señala muchas diferencias.


Si está interesado en escribir un servidor web desde cero, diría que estudiar Apache httpd es algo bueno, especialmente si puede ver cómo evolucionó con el tiempo. También le muestra lo que debe evitar (tanto en los puntos que se abordaron bien como en los lugares donde otros lo superaron). Sin embargo, el código puede ser un poco complejo para comenzar y es posible que prefiera buscar servidores más pequeños y livianos para eso. Pero estudie su arquitectura general y compárela con otras.

haylem
fuente
1
+1: Solo leer el historial del registro de cambios puede ser increíblemente instructivo para aprender cómo evolucionó el servidor web y qué desafíos atravesó el equipo a lo largo de los años.
Joel Etherton
1
+1 @haylem "algunos otros servidores web se benefician de una fama relativa": es tranquilizador leer sobre alternativas a Apache que se dice que son compatibles con Apache, es decir, harán casi el mismo trabajo.
therobyouknow
3

En mi opinión personal, todo se debe a todas las características que tiene. Puede hacer cosas con Apache que no podría hacer en este momento con nginx o lighthttpd. Apache es en realidad una plataforma que se entrega con soporte HTTP. Puede implementar casi cualquier protocolo como FTP o SMTP (consulte mod_echo, por ejemplo). Tiene soporte para filtros que le permite, por ejemplo: servir código PHP fuera de la base de datos en lugar de archivos (ya que mod_php es un módulo de filtro y no un productor de contenido). Esto puede parecer una idea no muy útil, pero en general puede usar filtros para alterar cualquier contenido que entre o salga sin la necesidad de modificar el productor de contenido original. Tiene ajustes para clientes HTTP que ya no existen, pero en aquel entonces, Apache era la única forma de servirlos de manera consistente y libre de errores. Gran parte de esto no se usa hoy en día.

El código adicional también se usa para la seguridad, porque mod_log_forensics junto con CoreDumpDirectory proporcionan una herramienta real cuando sientes que alguien está explotando una vulnerabilidad de seguridad. No he oído hablar de algo así en el caso de otros servidores web. En cuanto a la estabilidad, proviene de un núcleo bien estructurado, no de un código adicional. Hay chicos en la lista de correo de desarrollo de Apache, que se llaman "estabilizadores principales". Son muy exigentes con cualquier cambio en el núcleo y tienden a llevarlos a los módulos, lo que en realidad hace que Apache sea bastante estable. Si falla, la mayoría de las veces es una falla del módulo y no el error en el núcleo del servidor.

Jacek Prucia
fuente
3

He usado Apache durante más de doce años como administrador y desarrollador para grandes aplicaciones web de Perl, Python y Ruby. Apache es un servidor web sólido como una roca que tiene un diseño limpio / modular y una fuerte inclinación UNIX. Una de sus características más potentes es su gran modularidad y buena documentación. Es un servidor web muy manejable. Es maduro y probado, como se puede ver claramente en 15 años de cuota de mercado dominante .

Si bien la documentación del usuario es muy buena, desafortunadamente hay poca documentación valiosa para los desarrolladores / escritores de módulos, y creo que esto tiende a dañarla un poco, ya que no atrae a tantos desarrolladores como podría. Pero eso de ninguna manera significa que esté mal diseñado, simplemente mal documentado a este respecto. Hay un libro de Nick Kew que parece ser el recurso definitivo para los escritores de módulos. Pero sería bueno si el proyecto en sí tuviera una mejor documentación sobre todos los aspectos de los módulos de escritura.

En cuanto a su exceso de ingeniería: lavado de cerdo. Tiene un excelente diseño. Sí, hay algunas verrugas aquí y allá, pero eso es cierto para todo el software. Su uso de agrupaciones de memoria es fantástico, su capacidad para conectar diferentes back-end habla de lo limpio y modular que es, tiene una excelente C-API y el APR hace muchas cosas mucho más fáciles, no solo para el proyecto Apache para desarrolladores en otros proyectos. Si le importa algo la portabilidad, apreciará la APR. Puede que no sea perfecto, pero sigue siendo sólido, bien diseñado y muy conveniente.

Desde el punto de vista de las características, flexibilidad, administración, soporte de plataforma, escalabilidad, documentación y madurez, Apache es un servidor web fantástico.

Mike Owens
fuente
-2

Está sobre-diseñado / sobre-diseñado. Lo peor de todo es que usa APR (Apache Portable Runtime), una capa abultada que termina gastando muchos niveles de llamadas a funciones y asignación dinámica de memoria y liberación para lograr el equivalente de una sola printfllamada. Todo esto lleva a que sea:

  • muy lento
  • muy hambriento de recursos
  • imposible auditar por seguridad
  • difícil de entender y modificar
R .. GitHub DEJA DE AYUDAR AL HIELO
fuente
55
En su mayoría, señala las trampas de su complejidad y (discutible, depende de qué partes) mal diseño; Por válidas que sean estas declaraciones, no son causas de su complejidad.
haylem
1
-1 para la hinchazón APR. Estaba trabajando con APR en la era anterior a la 1.0 y en aquel entonces no estaba introduciendo más hinchazón de lo que ya estaba en la base de código 1.3. Además, la asignación dinámica de memoria en APR es más o menos una copia exacta del código de memoria 1.3. E incluso si tiene razón ... ¿cómo una hinchazón de cualquier tipo hace que algo sea imposible de auditar?
Jacek Prucia
de acuerdo con @haylem (+1) y también: esos cuatro puntos en la respuesta de @R ..: ¿cómo lo sabes? ¿Con qué te estás comparando? Puede que tenga razón, pero sus puntos serán relativos, es decir, "muy lentos", pero ¿en comparación con qué? ¿Otro servidor como los mencionados aquí? Si es así, por favor, cítelos.
therobyouknow
Creo que el sitio web thttpd tiene algunas buenas cifras para el contenido estático. Lo que es más sorprendente es que, por experiencia personal con un sistema de tareas para estudiantes basado en la web, Apache también fue mucho más lento mod_perlque thttpd solo estaba ejecutando una nueva instancia de Perl para cada cliente. Esto fue hace mucho tiempo y nunca hice pruebas rigurosas para localizar todas las causas; el departamento acaba de comprar un nuevo servidor ...
R .. GitHub dejar de ayudar a ICE
@R .: una vez más, ¿por qué lo ejecutarías con mod_perl :)
Haylem