Servidores Apache vs Nginx: la verdad sobre estos dos tipos de servidores

Publicado: 2022-01-03

Internet se ejecuta en una colección de servidores. Sin embargo, estos tienen una configuración diferente a la de una máquina de escritorio estándar. Un administrador de sistemas inteligente o un desarrollador back-end optimizará esta elección según las necesidades que tenga. La forma principal de hacerlo es a través de una selección de software de servidor. Una comparación popular en esta área es Apache vs Nginx.

Esto se debe a varias razones, pero las cifras de uso y la longevidad son dos de las principales. Nginx es más nuevo y posiblemente más capaz para los estándares web modernos. Sin embargo, Apache tampoco se anda con rodeos y es igual de capaz de servir sitios web a millones de usuarios en todo el mundo.

En esta publicación, le daremos una comparación de Apache vs Nginx. Vamos a ver elementos superficiales como la popularidad de ambos tipos de servidores. Sin embargo, también profundizaremos en las características técnicas y las consideraciones de cada uno. Al final, conocerá los entresijos de ambos tipos de software y cuál es el mejor para su servidor.

Qué son Apache y Nginx

Leer este artículo significa que probablemente comprenda que un servidor web requiere un software especializado para proporcionar un rendimiento óptimo. Si bien este artículo no cubrirá qué es o qué hace el software de servidor en un sentido general, cubriremos dos de las principales soluciones para su servidor:

  • Apache. Este es un software gratuito y de código abierto que viene preinstalado con la mayoría de las 'distribuciones' de Linux. Ha existido desde 1995 y, debido a estos dos factores, tiene una posición casi líder en el mercado.
  • Nginx. Si bien es un bebé relativo en comparación con otro software de servidor, Nginx tiene muchos usuarios. En la redacción actual, es casi conjunto primero con Apache para el software de servidor más popular (más de lo cual más adelante).

Vale la pena señalar que Apache ha sido líder en software de servidor durante décadas y ha tenido una gran participación de mercado durante ese tiempo. Sin embargo, Nginx es ahora el favorito, aunque no por mucho.

Un gráfico de Google Trends que muestra Apache vs Nginx.

LEYENDA: La línea azul aquí de Google Trends representa las búsquedas de Apache desde 2004, mientras que la línea roja se relaciona con Nginx.

En cuanto a lo que Apache y Nginx aportan, esto podría llenar varios libros sobre el tema. Sin embargo, intentaremos hacerlo en menos de 2000 palabras, comenzando con el conjunto de características generales de ambos.

Las características generales de Apache y Nginx

Debido a que tanto Apache como Nginx son software de servidor web HTTP, encontrará muchas similitudes. Por ejemplo, ambos son de código abierto, lo que significa que funcionarán en una variedad de sistemas. Por extensión, ambos son flexibles y ampliables, pero existen diferentes objetivos para cada tipo de servidor.

Sin embargo, Apache vs Nginx no es una comparación real, ya que ambas piezas de software abordan el proceso de configuración de un servidor web de manera diferente. En realidad, ambos se adaptarán mejor a diferentes aplicaciones.

En el resto de este artículo, le mostraremos esto a través de un desglose de los detalles técnicos de Apache y Nginx. Esto es lo que vamos a cubrir:

  • Un desglose técnico de cada tipo de software de servidor, que incluye manejo de solicitudes y conexiones, tecnologías de almacenamiento en caché y más.
  • Configuración y ampliación de Apache, incluidos detalles sobre su archivo .htaccess y sus módulos.
  • Cómo configura Nginx y su extensibilidad.

Esto no parece mucho para considerar, pero puede desglosar cada uno en una serie de otras subsecciones. Haremos exactamente esto, comenzando con las diferencias técnicas.

Las diferencias técnicas entre Apache y Nginx

En un sentido general, Apache y Nginx toman caminos casi únicos y exclusivos para lograr el mismo objetivo de un servidor web óptimo. Si comparas cada uno de forma amplia, verás lo diferentes que son:

  1. Apache usa una arquitectura 'basada en procesos', mientras que Nginx usa una 'basada en eventos'.
  2. Si bien ambos tipos sirven archivos estáticos (aunque de manera diferente), Nginx no sirve contenido dinámico.
  3. Cada tipo de software interpreta las solicitudes HTTP de una manera central diferente.

Vamos a ver algunos de estos aspectos, comenzando con las consideraciones sobre el manejo de la conexión.

Manejo de conexiones

Encontrará que Apache vs Nginx le da mucha importancia a cómo cada tipo maneja las conexiones y solicitudes. Por ejemplo, Apache utiliza un enfoque basado en procesos, en el que creará una nueva solicitud para cada subproceso mediante un módulo de procesamiento llamado mpm_prefork . Esto puede ser rápido si la cantidad de solicitudes es menor que la cantidad de procesos, pero después de esto hay un impacto en el rendimiento.

De hecho, Apache ofrece mucha flexibilidad para crear un algoritmo de manejo de conexiones que se adapte a sus necesidades utilizando mpm_prefork , mpm_worker y mpm_event . Por el contrario, el diseño de Nginx es tal que intenta mitigar los aspectos negativos de rendimiento que tiene Apache.

Lo hace a través de la forma en que genera procesos de trabajo basados ​​en eventos. Esto significa que Nginx es excelente para escalar, ya que puede administrar múltiples solicitudes dentro de un solo hilo.

Solicitar Interpretación

Tanto Apache como Nginx también adoptan un enfoque diferente para interpretar las solicitudes que recibirá un servidor. Por ejemplo, Nginx usa el Identificador uniforme de recursos (URI) de una solicitud para traducirla a un elemento físico del sistema de archivos.

Puede ver esto en el formato de algunos de los bloques de configuración, como el server y location . Trabajan juntos para analizar un URI y convertirlo en algo dentro del sistema de archivos.

 server { listen 80; server_name example.org www.example.org; root /data/www; location / { index index.html index.php; } location ~* \.(gif|jpg|png)$ { expires 30d; } location ~ \.php$ { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }

Por el contrario, las raíces de Apache como un software de servidor web 'puro' significa que asume y actúa sobre la base de que cada solicitud es un recurso en el sistema de archivos. Sin embargo, Apache también puede trabajar con URI donde la solicitud es más abstracta. A pesar de esto, la documentación advierte contra el uso de cualquier otra cosa que no sea el método basado en archivos.

Rendimiento estático frente a dinámico

Cuando se trata de rendimiento, Apache vs Nginx es una consideración importante para casi todos los usuarios. En contexto, la comparación se reduce a cómo cada tipo de software ofrece contenido estático y dinámico.

Debido a que la arquitectura inherente de Apache funciona con el sistema de archivos de manera directa, es excelente para servir contenido estático. Sin embargo, también procesará contenido dinámico dentro del servidor, que es una implementación similar que también es flexible si necesita intercambiar módulos según los requisitos que tenga.

En comparación, Nginx no procesa ningún contenido dinámico en absoluto. Es más complicado, porque Nginx tiene que pasar estas solicitudes a un trabajador o protocolo externo. Aun así, encontrará que hay menos sobrecarga de rendimiento y Nginx puede utilizar otros protocolos con mayor adaptabilidad.

Para el contenido estático, esto puede ser tan sencillo como Apache y, en algunos casos, una opción de mejor rendimiento. Esto se debe a que Nginx puede comunicarse con el intérprete cuando lo necesita, en lugar de ser una parte inherente del rendimiento general del software del servidor.

Modelo de configuración distribuida de Apache

No sorprenderá que Apache y Nginx tengan un enfoque diferente para la configuración de su servidor. En resumen, la configuración de Apache vs Nginx depende de si puede hacerlo a nivel de directorio.

Apache utiliza un modelo distribuido, lo que significa que puede configurar el servidor por directorio. Lo harás a través de archivos .htaccess . Apache verificará cada componente de la ruta del archivo solicitado en busca de un archivo .htaccess y llevará a cabo las directivas internas.

Un archivo .htaccess que muestra el módulo mod_rewrite junto con algunas reglas de reescritura.

En nuestra opinión, un archivo .htaccess es mucho más flexible que cualquier otro sistema. Es rápido de encontrar, abrir y editar. El poder al alcance de tu mano para realizar muchas acciones poderosas es grandioso. También encontrará que un servidor Apache procesará un archivo .htaccess cada vez que descubra uno, sin necesidad de recargar el servidor.

También es fantástico si necesita permitir que algunos usuarios controlen aspectos de sus sitios que afecten a toda la configuración del servidor. Esta es la razón por la que los servidores Apache son un pilar de las plataformas de alojamiento compartido, junto con su sistema de módulos flexibles.

Módulos de Apache

Puede cargar y descargar módulos de forma dinámica utilizando Apache. Esto es similar al uso de complementos y temas dentro de WordPress: la funcionalidad central de Apache lleva a cabo los pasos fundamentales, mientras que los módulos activos lo ayudan a crear una experiencia única.

Estos módulos pueden cubrir mucho terreno y hay muchos disponibles. Módulos como mod_php pueden cambiar la funcionalidad central del servidor, mientras que el popular mod_rewrite te permite realizar muchas otras tareas:

  • Restricción de direcciones IP.
  • Cambiar la carpeta de inicio de su sitio.
  • Realización de redireccionamientos 301.
  • Configuración de una página de inicio predeterminada.

Entre .htaccess y el sistema de módulos dinámicos, Apache representa una forma clara para que la mayoría de los usuarios modifiquen y optimicen un servidor web y un sitio.

Modelo de configuración centralizada de Nginx

Nginx adopta un enfoque centralizado para la configuración del servidor. Esto significa que hay un archivo de configuración (que termina con una extensión .conf ). A veces es difícil de encontrar dependiendo de la estructura de su servidor.

Esto tiene algunas desventajas claras para el propietario de un sitio en ciernes que desea realizar cambios en un servidor. Para sitios en alojamiento compartido, es casi imposible configurar el servidor. También hay mucha menos flexibilidad.

Sin embargo, también hay algunas ventajas, basadas en el rendimiento. Debido a que Nginx solo tiene una ubicación para un archivo de configuración y Apache podría usar varias ubicaciones, solo habrá una búsqueda. Por extensión, también habrá menos impacto en el rendimiento para ubicar ese archivo de configuración.

También encontrará que debido a que la configuración es central, los propietarios del sitio no tendrán la responsabilidad de administrar los aspectos relacionados con la seguridad. Esta es otra ventaja para el enfoque de Nginx, porque la responsabilidad de la seguridad recae únicamente sobre los hombros del administrador del sistema.

Módulos de Nginx

Es justo decir que el sistema de módulos de Nginx no es tan permisivo ni flexible como Apache, a pesar de ofrecer el mismo tipo de funcionalidad. Por ejemplo, tome las reglas de redirección de Nginx:

 server { listen 80; server_name www.olddomain.com; return 301 $scheme://www.newdomain.com$request_uri; }

Esto se debe a que no puede cargarlos como elementos dinámicos con Nginx. Volviendo a nuestra analogía con WordPress, esto es como tener que reinstalar todo el sitio para desactivar un complemento.

En la superficie, esto no parece factible y parece ser un detrimento masivo. Sin embargo, lo que le falta en flexibilidad, lo gana en estabilidad y funcionalidad centrales. Si sabe lo que su servidor necesita en el momento de la compilación, puede incluir todos esos componentes y módulos.

También hay un aspecto de seguridad a considerar. Debido a que no intercambiará módulos dinámicos dentro y fuera de su sistema, sabrá lo que hace y puede hacer cada elemento. Hace que la estructura y la arquitectura de su servidor sean claras y más fáciles de mantener, así como más eficientes.

Por qué usaría Apache o Nginx

En resumen, Apache vs Nginx no es una decisión clara. Para empezar, la opinión típica de que Nginx tiene un mejor desempeño que Apache es engañosa. Si configura bien un servidor Apache, tiene el mismo rendimiento que un servidor Nginx equivalente.

Apache es excelente para servir contenido estático y dinámico de una manera simple. Ofrece un poder inmenso para aquellos que son nuevos en la administración de un servidor, flexibilidad en la configuración. En un sentido general, necesitará menos conocimientos técnicos para configurar un servidor Apache que Nginx.

Sin embargo, el rendimiento es donde brilla Nginx. La configuración de su arquitectura garantiza que pueda lograr más por ciclo de procesador que un servidor Apache. Esto es a pesar de la menor flexibilidad en la configuración.

En algunos casos, es posible que no pueda elegir entre Apache y Nginx, especialmente si usa un host compartido. Sin embargo, si lo hace, la elección dependerá de su experiencia, objetivos y necesidades.

Resumen

Su elección de software de servidor es importante y tiene innumerables opciones a su disposición. En realidad, no vas a elegir un tipo de servidor del campo izquierdo. En cambio, a menudo seleccionará entre dos o tres tipos. Apache vs Nginx es una comparación que se considera con frecuencia, porque ambos ofrecen un rendimiento y una confiabilidad sobresalientes a largo plazo.

Este artículo ha analizado cómo Apache vs Nginx se compara en estos dos frentes y más. Hay una gran cantidad de consideraciones técnicas para estudiar minuciosamente, y esto será un factor en su elección más que cuán popular es un software de servidor en particular entre la comunidad.

¿Tienes una opinión sobre Apache vs Nginx? ¡Comparta sus pensamientos con nosotros en la sección de comentarios a continuación!