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

14

El servidor HTTP de Apache es un proyecto bastante grande, mucho más grande que, por ejemplo, lighthttp o nginx o ciertamente los "servidores HTTP simples" que se ven flotando en los tutoriales de C / C ++.

¿Para qué es el código extra? ¿Agrega seguridad / estabilidad (y si es así, cómo?) O es solo para hacer cosas como analizar Apache conf files / .htaccess , escribir cosas (y, supongo, VirtualHosts etc).

Le pido que no critique a Apache, pero porque estoy interesado en escribir una especie de servidor web y me gustaría saber cosas que, aunque quizás no sean obvias, es importante recordar para una web segura, estable y rápida. servidor.

    
pregunta Aaron Yodaiken 28.05.2011 - 04:05

4 respuestas

20

Es mucho más complejo porque:

Pero también:

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

Dicho esto, R. responde 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 enlace para 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, yo diría que estudiar Apache httpd es algo bueno, especialmente si puede ver cómo evolucionó a lo largo del tiempo. También le muestra lo que necesita evitar (tanto en los puntos que aborda bien como en los lugares donde otros lo superan). Sin embargo, para comenzar, el código puede ser un poco complejo y quizás prefiera buscar servidores más pequeños y livianos para eso. Pero estudia su arquitectura general y compárala con otras.

    
respondido por el haylem 28.05.2011 - 04:09
3

En mi opinión personal, todo se debe a todas las características que tiene. Puedes hacer cosas con Apache que no podrías hacer ahora mismo con ni nginx ni lighthttpd. Apache es en realidad una plataforma que se envía con soporte HTTP. Puede tener casi cualquier protocolo implementado como FTP o SMTP (vea mod_echo por ejemplo). Tiene soporte para filtros que le permiten, 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 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 los clientes HTTP que ya no están disponibles, pero en ese entonces, Apache era la única forma de atenderlos de manera consistente y sin errores. Mucho de esto no se usa hoy en día. Algunas de mis instancias de Apache solo funcionan con 3-5 de los módulos estándar.

El código adicional también se usa para 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 nada de eso 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 tipos en la lista de correo de desarrollo de Apache, que se llaman "estabilizadores centrales". Son muy exigentes con cualquier cambio en el núcleo y tienden a empujarlos hacia los módulos, lo que en realidad hace que Apache sea bastante estable. Si falla, la mayoría de las veces es un fallo del módulo y no el error en el núcleo del servidor.

    
respondido por el Jacek Prucia 03.06.2011 - 09:24
3

He utilizado Apache durante más de doce años como administrador y desarrollador de 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 de UNIX. Una de sus características más poderosas es su gran modularidad y buena documentación. Es un servidor web muy manejable. Está maduro y demostrado como se puede ver claramente por 15 años de dominante cuota de mercado .

Si bien la documentación del usuario es muy buena, desafortunadamente hay muy poca documentación para los desarrolladores / escritores de módulos, y creo que esto tiende a perjudicarlo 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 al 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 la escritura de módulos.

En cuanto a que está sobre-diseñado - hogwash. Tiene un excelente diseño. Sí, hay algunas verrugas aquí y allá, pero eso es cierto para todo el software. El uso de grupos de memoria es fantástico, su capacidad para conectar diferentes back-ends habla de lo limpio y modular que es, tiene una gran C-API, y el APR hace que muchas cosas sean mucho más fáciles, no solo para el proyecto Apache. Desarrolladores en otros proyectos. Si le importa algo sobre la portabilidad, apreciará el 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 fantástico servidor web.

    
respondido por el Mike Owens 03.08.2011 - 00:19
-2

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

  • muy lento
  • muy hambriento de recursos
  • imposible auditar la seguridad
  • difícil de entender y modificar
respondido por el R.. 28.05.2011 - 04:33

Lea otras preguntas en las etiquetas