Apache vs. Nginx: cuál es el servidor web ideal
Actualizado el 14 de octubre, 2016. Por BlueHosting.
Apache y Nginx se han convertido en los dos servidores web de código abierto más conocidos y utilizados en el entorno web. Ambos son gratuitos y hoy están detrás de millones de sitios web que representan un altísimo porcentaje del total de sitios en circulación. Seleccionar su servidor web puede ser una decisión difícil y es probable que una vez que haga su elección y comience el despliegue de su aplicación, se mantenga usando la misma opción por un período bastante prolongado. Cambiar de un servidor web a otro no es sencillo y se requieren muchas adaptaciones y cambios no solo en el propio servidor web, sino en el resto de la plataforma. Este tutorial presenta algunos consejos prácticos que le pueden ayudar a tomar una decisión sustentada para comenzar con el despliegue de su aplicación o sitio web.
Introducción
Apache es el servidor web por excelencia, su desarrollo comenzó en 1995 y continúa hasta el día de hoy. Apache nace a finales de febrero del año 1995 con el fin de ampliar el desarrollo del demonio HTTP, el cual se había estancado debido a que su desarrollador principal —Robert McCool— había dejado el proyecto. Un grupo de desarrolladores se unió para continuar el proyecto y unir todas las mejoras, parches, soluciones de bugs y hacer las pruebas pertinentes hasta el lanzamiento de la primera versión de Apache en abril de 1995. Menos de un año después, Apache se catalogó como el primer servidor web a nivel mundial, puesto que disputa hasta el día de hoy.
Luego se creó la fundación Apache Software Foundation con la pretensión de ofrecer soporte para el servidor HTTP Apache. Una gran comunidad de usuarios, desarrolladores, programadores y expertos mantienen esta plataforma y siguen implementando mejoras adaptadas a las necesidades en un mercado creciente y cambiante. Esto, y el hecho de que Apache es un software de código abierto, hacen que exista una gran cantidad de información y documentación en línea. Este software también se destaca por su amplia flexibilidad a través de un uso modular, su estabilidad y todas las características que se le han añadido a lo largo de tantos años de desarrollo.
Por su parte, el proyecto Nginx —pronunciado en inglés como "Engine x" o motor x— es un servidor web desarrollado por Igor Sysoev. El desarrollo de Nginx comenzó en 2002, y se creó con el fin de responder a sitios de muy alto tráfico. Al igual que Apache, Nginx puede ejecutarse en varios sistemas operativos, incluyendo OS X, Linux, Unix, Solaris y Windows. También es un software gratuito y de código abierto (también existe una versión comercial comercial llamada Nginx plus).
Nginx es un servidor web HTTP, un servidor proxy inverso, un servidor proxy para correo electrónico (IMAP/POP3) y un servidor proxy genérico para TCP/UDP. Entre las características principales de Nginx se incluyen: opciones de almacenamiento en caché, estabilidad, balanceo de carga y utilidad para sitios con alto tráfico. Además cuenta con una prestación muy interesante: es asíncrono. La popularidad de Nginx ha venido en crescendo en los últimos años debido a la facilidad de adaptarlo con otras tecnologías novedosas, como Node.js.
Datos estadísticos
Los datos presentados a continuación forman parte de la última encuesta elaborada por el sitio NetCraft, el mismo que usan Apache y Nginx como referencia al evaluar sus estadísticas. Presentamos información actualizada sobre la participación de mercado de estos servidores en la web para septiembre de 2016.
Durante el mes de septiembre de 2016 Microsoft IIS se ha venido imponiendo como el servidor web más utilizado por el total de sitios web disponible en la Internet, con un 42%. Le sigue Apache con un 25% y NGINX con 14%. Sin embargo, cuando evaluamos los datos llevados a un entorno más real —en este caso los sitios web activos— Apache lleva la delantera por un gran margen. Según el estudio, este servidor web ejecuta el 46% de los sitios web activos en Internet, lo que representa un total de más de 80 millones páginas y aplicaciones web. Mientras tanto, detrás de un 19% de los sitios web activos a nivel mundial se encuentra el servidor NGINX, con más de 32 millones de sitios activos. Al observar el comportamiento en el uso de estos servidores durante los últimos 5 años, se evidencia una caída leve —pero sostenida— del servidor web Apache. NGINX ha experimentado un comportamiento inverso: ha venido creciendo poco a poco, pero de manera sostenida.
Otro dato estadístico interesante que se toma en cuenta en este estudio es la participación de mercado, pero esta vez, enfocada únicamente en los sitios web con más actividad (la muestra es del primer millón de sitios más activos). Es en esta encuesta donde vemos el repunte de NGINX: para septiembre de 2011, este servidor web representaba solo al 7% de los sitios más activos en la web; mientras que para septiembre de 2016 alcanza el 28%. En este mismo estudio se demuestra la caída —cada vez más pronunciada— del servidor web Apache, que pasó de tener más del 66% de participación en los sitios web más activos a un valor menos relevante de 43% para septiembre de 2016.
¿Ya va teniendo una idea de cuál es el servidor web más adecuado para usted? Los datos estadísticos parecen indicar que los usuarios cada vez se inclinan más a usar NGINX. También parece que el liderazgo que ha mantenido Apache por más de dos décadas está cerca de terminar. Para una visualización más clara, hemos reunido los datos para presentarlos en los siguientes gráficos:
Pero todo no se trata de estadísticas o seguir tendencias, antes de tomar una decisión debe evaluar cuáles son las necesidades de su sitio web y seleccionar con base en las características que ofrecen estos servidores web y cómo se adaptan a su aplicación.
Manejo de contenido estático y dinámico
Apache puede manejar solicitudes de contenido estático con métodos basados en los módulos de procesamiento o MPMs. Cuando se trata de contenido dinámico, Apache supera a Nginx. Este tipo de contenido es embedido —o integrado— en un procesador del lenguaje en cuestión en cada instancia del worker. Dicho de otra forma, Apache no requiere componentes externos para procesar el contenido dinámico. De esta manera, no es necesario integrar otros pasos adicionales de procesamiento y se disminuyen los costos de transacciones, lo que se evidencia en mejores tiempos de carga cuando se trata de contenido dinámico.
La forma de procesar el contenido dinámico es distinta en Nginx. Este servidor no maneja contenido dinámico de manera nativa; si Nginx recibe solicitudes de contenido dinámico debe pasarlas a procesador externo, el cual se encarga de interpretarlo, procesarlo y enviarlo de vuelta al servidor Nginx. Esto aumenta los tiempos de espera y por lo tanto, los tiempos de carga de contenido dinámico. Con respecto al contenido estático, Nginx lo maneja de manera directa y rápida debido a la arquitectura explicada a continuación.
Arquitectura
Arquitectura de Apache
En cuanto a la arquitectura, el código de Apache está construido bajo un concepto bastante útil: la flexibilidad. El funcionamiento de Apache estará basado en el Módulo de Multiprocesamiento o MPM seleccionado. Esto hace que su arquitectura sea bastante flexible en cuanto a las conexiones y los algoritmos que manejan las solicitudes. Así pues, Apache puede estar basado en procesos, hilos o eventos.
El módulo Prefork (mpm_prefork
) genera procesos con un solo hilo para manejar cada solicitud, cada proceso hijo puede manejar una conexión a la vez. En condiciones ideales este módulo funcionar bastante rápido, pero este MPM pierde su encanto cuando el número de conexiones supera al número de procesos, aumentando considerablemente el consumo de RAM. Por otro lado, el módulo Worker (mpm_worker
) permite una estructura multihilos. Los procesos generados por un Worker pueden manejar varios hilos a la vez, y cada uno de estos hilos puede manejar una conexión. Esta concepción es más eficiente y permite que las conexiones puedan hacerse de un hilo que esté libre en lugar de esperar por un proceso.
El módulo de eventos o Event (mpm_event
) está basado en el worker y funciona casi de la misma manera. La gran diferencia es que es una implementación asíncrona, diseñada para permitir que más solicitudes sean servidas simultáneamente pasando parte del trabajo de procesamiento a los hilos de escucha. Esto lo hace dedicando un hilo de escucha para cada proceso junto con un grupo de hilos worker, compartiendo colas específicas para las solicitudes en modo Keep Alive.
Arquitectura de Nginx
Nginx es un servidor asíncrono construido buscando solucionar los problemas de concurrencia que experimentaban ciertos sitios. El algoritmo desarrollado para este servidor es muchísimo más eficiente y consumo menos recursos.
Nginx genera procesos worker, cada uno de los cuales puede manejar miles de conexiones. Se puede lograr esto debido a la implementación de un mecanismo de bucle rápido que busca y procesa eventos continuamente. Cada conexión manejada por el worker es dispuesta dentro del bucle de eventos, donde vive con otras conexiones. Los eventos dentro de este bucle se procesan de forma asíncrona, permitiendo que el trabajo sea manejado de forma no bloqueante. Cuando una conexión se cierra, se elimina del bucle. Esta disposición asíncrona y monohilos ayuda a que —incluso con recursos limitados— Nginx sea bastante rápido en cuanto al procesamiento de conexiones. Por consiguiente, el uso de CPU y memoria tiende a bajar debido a la eficiencia en el manejo de conexiones.
Cuadro comparativo
Ahora que hemos abordado una introducción básica de cómo funciona cada servidor y cuál es su participación de mercado, incluiremos una tabla comparativa con datos más específicos de cada servidor:
Criterio | Apache | Nginx |
---|---|---|
Participación en el mercado web | Como ya hemos visto en la primera sección de esta guía, Apache se mantiene en la cabeza de los servidores web de código abierto a nivel mundial. Sin embargo, ha experimentado una caída mantenida en el último año. | Nginx ha venido creciendo linealmente en los últimos 5 años y se perfila como uno de los servidores web más utilizados. |
¿Qué sitios populares lo utilizan? | Entre algunos ejemplos se incluyen: paypal.com, apple.com y ask.com. (Datos de W3 Techs). | Sitios populares como pinterest.com, wordpress.com y tumblr.com están respaldados por Nginx. (Datos de W3 Techs). |
Contenido estático/dinámico | Apache es flexible y puede manejar contenido estático y dinámico sin problemas mediante el uso de MPMs, en ocasiones, con un alto costo en recursos. | Nginx maneja el contenido estático muy rápidamente debido a su arquitectura. Para manejar contenido dinámico debe usar un componente externo. |
Configuración | Además de los archivos fuente para su configuración, Apache puede usar archivos ocultos. Por defecto, utiliza las directivas en el archivo .htaccess , lo que permite descentralizar la configuración de Apache, facilitando su implementación incluso cuando no tiene acceso a los archivos .conf dentro del servidor. Esto es una ventaja, pero también supone un riesgo de seguridad y podría causar incoherencias y anulaciones entre una configuración y otra. |
Nginx debe ser configurado desde los archivos fuente, en otras palabras, el acceso a su configuración es absolutamente centralizado. Aunque esto es menos flexible, es más seguro y más eficiente a la hora de cargar la configuración. |
Arquitectura | Flexible a través de módulos, puede estar basado en hilos, procesos o eventos. | Arquitectura basada en eventos. Procesamiento asíncrono. |
Rendimiento | El uso de memoria y CPU generalmente es bueno, pero depende de la configuración y selección de módulos. Puede fallar cuando existe alto tráfico (muchas solicitudes concurrentes). | Mejora el rendimiento considerablemente. Debido a la eficiencia de su algoritmo y arquitectura suele consumir menos recursos incluso en picos de sesiones concurrentes. |
Características y prestaciones | Soporte para lenguajes de programación del lado del servidor; soporte de interfaces de lenguajes comunes como Perl, Python y PHP; módulos útiles de autenticación; soporte para SSL/TLS; módulos para proxy; archivos log personalizables; soporte de filtros; reescritura de URL; hosting virtual que permite que el mismo servidor sirva distintos sitios web; métodos de compresión como gzip; entre otras. | Sirve archivos estáticos; soporte SSL/TLS; proxy inverso; balanceo de carga; compresión; control de acceso; reescritura de URL; registro de logs personalizado; hosting virtual que permite que el mismo servidor sirva distintos sitios web; entre otros. |
Documentación y soporte | Ampliamente documentado. Existen miles de guías, manuales, tutoriales e incluso libros que abordan distintos temas del servidor Apache. Al mantenerse como una plataforma gratuita, no provee servicios de soporte. | Cada vez existe más documentación, pero no es tan abundante como en el caso de Apache. El servicio pago de Nginx plus provee soporte. |
Los datos presentados a lo largo de este tutorial ya pueden darle una base para tomar una decisión. ¡Pero antes de seleccionar su servidor web, eche un vistazo a la siguiente sección!
¿Decisión Híbrida?
Muchos esperan obtener una respuesta definitiva en relación con el mejor servidor web disponible. Sin embargo, algunos desarrolladores y empresas han decantado por sacar lo mejor de cada servidor y utilizar ambos. ¡Sí!, combinar ambos servidores web en un entorno híbrido podría funcionar muy bien si usted posee un sitio web con requerimientos particulares. Un ejemplo de esto utilizar Apache para servir su contenido dinámico y Nginx para parte de su contenido estático. La combinación entre estos dos servidores dependerá de sus requerimientos específicos. Se recomienda planificar y desplegar correctamente para evitar conflictos entre ambos servidores. Estos procedimientos suelen ser llevados a cabo por administradores y desarrolladores más avanzados que quieren implementar aplicaciones más complejas.
Conclusión y recursos adicionales
La conclusión queda de parte del usuario y la plataforma que desea desarrollar. Ambas son opciones muy robustas y todo dependerá de las características particulares de su aplicación o sitio web. Si en este punto no ha tomado una decisión, pruebe Nginx, es una opción que aporta un rendimiento gratamente óptimo; obtendrá un sitio web estable y con buenos tiempos de respuesta. Apache es el servidor web por excelencia, y bajo ningún concepto debe descartarse —de hecho suele ser la primera opción cuando se despliega un sitio web— pero este servidor web podría quedarse corto si espera recibir una alta concurrencia, a menos que tenga grandes recursos de hardware.
Puede consultar los siguientes recursos en busca de información que complemente nuestra guía. Aunque este material es provisto esperando que sea útil, tenga en cuenta que no podemos certificar la actualidad o precisión de los contenidos externos.