Nginx y Apache servicio combinado más del 50% de la web. Pero Apache ha experimentado un declive en los últimos años, a favor de Nginx. Es Nginx realmente mejor, y ¿hay algún beneficio en usar Apache?
Nginx es más nuevo y más rápido
Nginx es mucho más ligero que Apache. Este es un problema arraigado en el diseño: debajo del capó, Apache debe crear un nuevo hilo de proceso para cada conexión. Y aunque puede procesar 10 subprocesos a una velocidad comparable a Nginxcuando se amplía a cientos de conexiones simultáneas Nginx toma una ventaja decisiva.
Nginx funciona de manera diferente y puede procesar múltiples conexiones dentro de un solo hilo de proceso. Está diseñado para funcionar también como un proxy inverso simple, por lo que en lugar de generar la sobrecarga de un servidor web completo, simplemente está diseñado para mover bytes de datos de un lugar a otro. Nginx puede ser más del doble de rápido que Apache cuando sirve contenido estático, y mucho menos CPU cuando lo hace, lo que lo hace excelente para ejecutarse en sistemas de baja potencia.
Sin embargo, esta velocidad solo importa cuando se entrega contenido estático a muchos usuarios a la vez. Cuando comienza a ofrecer contenido dinámico, el cuello de botella se encuentra en otra parte, como en su motor PHP, su aplicación web o su base de datos.
Porque Nginx también es un proxy inverso, puede usarlo frente a otro servidor (incluso Apache) específicamente para alojar contenido estático. Un útil example es aplicaciones de nodo de representación del lado del servidor, donde las solicitudes HTTP a páginas dinámicas deben reenviarse a un servidor que ejecuta Express, pero los recursos estáticos (imágenes, hojas de estilo, etc.) se pueden servir desde Nginx. La sobrecarga al hacer esto es mínima y puede acelerar significativamente el contenido estático.
Apache es más configurable
Apache está más centrado en ser un servidor web y tiene algunas funciones útiles, como archivos de configuración basados en directorios y hosts virtuales. Esto hace que ejecutar múltiples sitios en el mismo servidor sea muy fácil. Para examplepuede agregar un bloque VirtualHost como este a/etc/httpd/conf/httpd.conf
:
<VirtualHost 127.0.0.1:80> DocumentRoot /var/www/html ServerName www.firstsite.com </VirtualHost>
esto hará Apache enrutar todas las solicitudes awww.firstsite.com
a una carpeta específica, que puede tener su propia configuración independiente de otros sitios que se ejecutan en el servidor. Esto se puede aumentar aún más con.htaccess
archivos, que puede sobrescribir la configuración del servidor para una carpeta específica. Sin embargo, ejecutar sitios con.htaccess
es más lento que usar la configuración global, y solo se recomienda en los casos en los que desea permitir que otros usuarios modifiquen la configuración del servidor para un directorio sin tocar la configuración global (el alojamiento compartido es el principal example de esta).
Nginx también puede servir múltiples dominios desde un solo servidor y enrutarlos a sus propias carpetas, pero no es tan configurable, especialmente con una falta de funcionalidad similar a.htaccess
. Pero, si realmente necesita ese tipo de funcionalidad, puede usar Nginx como un proxy inverso para acceder al contenido servido en otro lugar, incluso ejecutándose en otra instancia de Nginx o múltiples contenedores Docker.
Apache también tiene mucho mejor soporte de complementos,en forma de módulosque se puede cargar dinámicamente sin reiniciar el servidor. Nginx también admite módulos, pero la carga de módulos solo se agregó recientemente, por lo que muchos módulos aún requieren que parchee el binario.
¿Qué servidor debería elegir?
A pesar de las deficiencias, ambos son servidores web decentes. Sin embargo, ambos son gratuitos y de código abierto. Nginx tiene una versión paga llamadaNginx Másque agrega un balanceador de carga de software además de código abierto Nginx. Ambos servidores son seguros, tienen buenas comunidades de soporte y son fáciles de configurar. Mientras Nginx gana en velocidad, ambos son comparables a la hora de ofrecer contenido dinámico.
Si no está seguro de cuál usar, vaya con Nginx. En general, si está ejecutando un sistema Unix, Nginx es una buena elección simplemente por su rapidez y facilidad de uso. Si necesita más configuración, especialmente si está ejecutando muchos sitios web desde el mismo servidor, Apache puede funcionar mejor.
Una cosa a tener en cuenta es que si está utilizando PHP, la configuración para Nginx es un poco diferente Apache ejecuta PHP de forma nativa en el mismo proceso, comunicándose directamente con el motor de PHP. Nginx lo ejecuta en un proceso separado (PHP-FPM
) y se comunica con él como un proxy inverso. Ambos métodos son igual de rápidos, pero su configuración variará.
Nginx y Apache ambos son totalmente compatibles con cualquier sistema Unix, incluido FreeBSD. Mientras Nginxtécnicamente tiene una versiónque corre Windowsno es lo mejor. Apache estotalmente apoyado en Windowsy como tal es el servidor web de referencia en esa plataforma.