El servidor HTTP Apache es un proyecto bastante grande, mucho mayor que, por ejemplo, lighthttp
o 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 conf
archivos Apache / .htaccess
escribir cosas (y, supongo, VirtualHosts
etc.).
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.
Respuestas:
Es mucho más complejo porque:
Pero también:
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.
fuente
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.
fuente
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.
fuente
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
printf
llamada. Todo esto lleva a que sea:fuente
mod_perl
que 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 ...