GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Apache vs Nginx - Comparación detallada

Introducción

Los servidores web han sido una parte fundamental de Internet desde los inicios de la World Wide Web. El software del servidor web recibe solicitudes de clientes remotos y sirve a los clientes con páginas web almacenadas en hardware, como servidores dedicados.

En este artículo de comparación, leerá sobre las diferencias entre los dos servidores web de código abierto más populares en la actualidad:Apache y Nginx.

Acerca del servidor Apache

Apache HTTP Server (o Apache para abreviar) es un software de servidor web de código abierto desarrollado por Apache Software Foundation. Inicialmente se diseñó como un servidor web basado en procesos, pero a partir de la versión 2.0 y la introducción de los módulos de procesamiento múltiple, se puede configurar como un servidor basado en procesos y en subprocesos. La arquitectura modular del servidor también permite funciones como el manejo de protocolos modulares.

Otra característica esencial de la arquitectura de Apache son los filtros, que permiten que los módulos interactúen con el contenido creado por otros módulos. Esta interacción incluye encriptación, análisis de virus y compresión de contenido tanto estático como dinámico.

Nota: El servidor Apache HTTP funciona mejor en Linux. Aprenda a instalar Apache en CentOS. Para Ubuntu, lea Cómo instalar el servidor web Apache en Ubuntu. Para la administración básica del servidor web Apache, aprenda cómo iniciar, detener y reiniciar Apache.

Acerca del servidor Nginx

Nginx (pronunciado motor-x) es un servidor web de código abierto desarrollado por Nginx, parte de F5, Inc.
Como servidor HTTP, Nginx utiliza una arquitectura basada en eventos (asincrónica) altamente escalable que permite un alto rendimiento y una pequeña huella de memoria.

Nginx también puede funcionar como proxy inverso, equilibrador de carga, proxy de correo y caché HTTP. En algunos casos de uso, Nginx también sirve como acelerador web o terminador SSL/TLS.

Nota: Al igual que Apache, Nginx también es más compatible con Linux. Para instalar Nginx en CentOS, consulte Cómo instalar Nginx en CentOS. Para instalarlo en Ubuntu, lea Cómo instalar Nginx en Ubuntu. Para obtener instrucciones básicas de administración de Nginx, aprenda cómo iniciar, detener y reiniciar Nginx.

Apache frente a Nginx:una descripción general rápida

A continuación se muestra una descripción general rápida de los principales puntos de comparación entre Apache y Nginx.

Arquitectura

El servidor Apache HTTP cuenta con un pequeño núcleo de servidor y varios módulos. Los módulos se compilan estáticamente o se cargan dinámicamente.

En el momento del arranque, Apache inicia múltiples procesos de servidor. El propósito de esos procesos es compartir la carga de trabajo. El proceso principal es el proceso padre , mientras que otros son procesos secundarios . Cada proceso secundario crea una cantidad predeterminada de subprocesos del servidor que manejan las solicitudes entrantes.

Para optimizar el servidor para el sistema operativo, Apache utiliza el Módulo de procesamiento múltiple (MPM) . El propósito de este módulo es vincularse a puertos de red, aceptar solicitudes y administrar el manejo de solicitudes mediante la asignación de procesos secundarios para realizar estas tareas. Apache instala el MPM más adecuado para el entorno según el sistema operativo detectado y sus capacidades.

Las bibliotecas de Apache Portable Runtime (APR) son otra parte importante de un servidor Apache. Los APR proporcionan una capa de sistema operativo multiplataforma. Esta capa sirve como una API universal para desarrolladores, lo que elimina la necesidad de codificar problemas o funciones específicos de la plataforma.

Nginx cuenta con una arquitectura basada en eventos que permite escalar fácilmente en hardware moderno.

Al igual que Apache, Nginx tiene un proceso maestro principal . El propósito de este proceso es controlar el enlace del puerto y la lectura de la configuración. Sin embargo, a diferencia de Apache, los procesos creados por el proceso maestro están diseñados en base a un modelo de proceso predecible, cuyo principal objetivo es hacer el mejor uso de los recursos de hardware.

  • El cargador de caché es un proceso que se ejecuta al inicio y carga la memoria caché basada en disco en la memoria.
  • El administrador de caché se asegura de que las entradas de caché de disco estén dentro de los límites de tamaño definidos.
  • Los procesos de trabajo realizar operaciones de lectura y escritura y manejar conexiones de red.

Los procesos de trabajo comienzan escuchando y esperando eventos. Cada vez que se solicita una nueva conexión entrante, se inicia un evento. Al establecer la conexión, Nginx crea un descriptor de archivo que ocupa solo una pequeña cantidad de memoria del proceso de trabajo. Esta característica hace que Nginx sea significativamente más escalable que Apache, que utiliza el enfoque basado en procesos, en el que cada conexión por separado consume una gran cantidad de recursos.

Módulos

Tanto Apache como Nginx utilizan enfoques basados ​​en módulos. Sin embargo, la implementación es diferente.

Apache presenta módulos cargados dinámicamente que se pueden utilizar siempre que sea necesario. El servidor admite muchos módulos diferentes, tanto oficiales como de terceros. Esto convierte a Apache en una plataforma muy personalizable que los usuarios pueden adaptar a sus necesidades.

Nginx los módulos deben integrarse en el núcleo y no pueden cargarse dinámicamente. Para incluir módulos no estándar, los usuarios deben compilar su servidor desde la fuente. Si bien esta falta de flexibilidad puede parecer limitante, también significa una mayor seguridad, ya que permitir la integración de módulos dinámicos plantea problemas de seguridad.

Rendimiento

Al utilizar una variedad de módulos de procesamiento múltiple admitidos, Apache puede ejecutarse en tres modos:

  • Modo basado en procesos.
  • Modo híbrido de proceso y subproceso.
  • Modo de evento híbrido.

El usuario puede configurar Apache de la forma que mejor se adapte a sus necesidades. Por lo tanto, los recursos del servidor se utilizan de manera efectiva para un caso de uso particular.

Apache presenta un conjunto de optimizaciones para aumentar su rendimiento y escalabilidad. Algunas de estas optimizaciones son parte de la configuración predeterminada del servidor y los administradores del servidor pueden configurar el resto según las necesidades específicas de su sistema. El ajuste del rendimiento puede resolver muchos de los problemas de configuración del tiempo de ejecución y del tiempo de compilación de Apache.

Nginx es un servidor web creado específicamente para superar a Apache. Lo logra en varias categorías, como el tiempo de conexión, la cantidad de solicitudes recibidas por segundo, la tasa de transferencia y el tiempo dedicado a procesar una solicitud.

Los administradores del servidor pueden ajustar aún más el rendimiento de Nginx editando la configuración del servidor para que se ajuste a las especificaciones del sistema. El ajuste de los procesos y las conexiones de los trabajadores, la habilitación de la compresión Gzip y el almacenamiento en caché de archivos estáticos mejora significativamente el rendimiento de Nginx.

Contenido estático y dinámico

Apache procesa contenido tanto estático como dinámico mediante el uso de módulos cargados dinámicamente y no depende de componentes externos.

Si bien ambos servidores muestran un rendimiento similar en la carga de contenido dinámico, Nginx usa mucha menos memoria y maneja alrededor de cuatro veces más solicitudes por segundo para servir archivos estáticos. Esto se debe principalmente a que el intérprete de contenido dinámico no es una parte integral de un servidor Nginx. En su lugar, el servidor pasa todas las solicitudes de páginas web dinámicas a un proceso externo, espera a que el proceso devuelva el contenido y luego entrega el contenido al cliente. Si bien esto hace que el procesamiento de páginas dinámicas sea más complicado, simplifica el proceso de publicación de páginas estáticas.

Configuración distribuida frente a centralizada

Apache la configuración está distribuida. El servidor proporciona soporte para un archivo .htaccess para facilitar este tipo de configuración.

El .htaccess es un archivo de configuración a nivel de directorio compatible con varios servidores web, que se utiliza para tratar problemas de acceso a sitios web, como la redirección de URL, el acortamiento de URL, el control de acceso (para diferentes páginas web y archivos), y más. El principal beneficio de este enfoque es que los cambios realizados en .htaccess se aplican inmediatamente al sistema. Alterar el archivo de configuración principal requiere reiniciar el sistema para aplicar los cambios.

Además, en servidores que alojan varios sitios web, .htaccess permite a cada uno de los usuarios realizar cambios en la configuración de su sitio web sin alterar el archivo de configuración principal del servidor.

Nginx la configuración está centralizada y no es compatible con .htaccess . La razón de esto es que usar .htaccess también tiene varias desventajas. Una importante es la pérdida de rendimiento:cada vez que un servidor recibe una solicitud HTTP, debe verificar todos los directorios principales que pueden alojar un .htaccess archivo, para ver si lo contienen. Otra preocupación importante es la seguridad. Permitir que usuarios sin privilegios modifiquen la configuración del servidor puede ser peligroso si no se implementa correctamente.

Dado que no existe una configuración a nivel de directorio en Nginx, los usuarios realizan todos los cambios de configuración escribiendo directivas en el archivo de configuración principal, nginx.conf . Los cambios se aplican después de recargar el servidor.

Arquitectura de manejo de conexiones

Apache maneja las solicitudes de los clientes utilizando sus módulos de procesamiento múltiple. El principal beneficio de esto es que la arquitectura de manejo de conexiones se puede reemplazar sin esfuerzo cuando sea necesario. Estos módulos son:

  • mpm_prefork_module – El módulo prefork crea procesos con un hilo para cada solicitud que debe manejarse. Cada proceso hijo puede admitir una conexión. Si bien la cantidad de procesos creados es mayor que la cantidad de solicitudes, este módulo funciona bien. El problema principal de los módulos es que los grandes volúmenes de solicitudes afectan negativamente el rendimiento y aumentan significativamente el consumo de RAM.
  • mpm_worker_module – El módulo de trabajo crea procesos secundarios. Cada proceso secundario administra varios subprocesos, y cada subproceso admite una conexión. Dado que los subprocesos son más eficientes que los procesos, este módulo es más amigable con el rendimiento que el módulo prefork.
  • mpm_event_module – El módulo de eventos presenta un mecanismo similar al mecanismo del módulo trabajador. Sin embargo, también intenta resolver el 'mantener vivo 'problema:el hecho de que Apache, después de completar la primera solicitud del cliente, mantiene todo el proceso secundario o subproceso en espera de más solicitudes del cliente. El módulo de eventos se ocupa de este problema haciendo que un subproceso de escucha designado supervise el estado de los sockets.

Nginx maneja las conexiones mediante un algoritmo asíncrono, sin bloqueo y controlado por eventos. Usando una función de bucle rápido, los procesos de trabajo del servidor pueden manejar muchas conexiones al mismo tiempo al buscar y procesar eventos continuamente.

Cuando un trabajador establece una conexión, la conexión se une al bucle de eventos, donde se somete a un procesamiento asíncrono. Cuando la conexión se cierra, sale del bucle. Este tipo de manejo de conexión permite a Nginx escalar y utilizar recursos de manera económica.

Interpretación basada en archivos frente a URI

Apache interpreta principalmente las solicitudes como recursos del sistema de archivos, usando Directory y File bloques El servidor comienza con DocumentRoot e intenta ubicar el archivo usando la parte de la solicitud que sigue al host y al número de puerto.

Apache ofrece formas alternativas de atender la solicitud cuando no se puede encontrar la coincidencia correcta mediante el sistema de archivos:

  • Alias asigna direcciones URL a ubicaciones del sistema de archivos. Permite que los documentos se almacenen en otro lugar que no sea DocumentRoot .
  • Redirect asigna una URL antigua a una nueva URL. El servidor le pide al cliente que busque el recurso buscado en una ubicación diferente.
  • Location los bloques permiten trabajar con URI.

A diferencia de Apache, cuyo diseño refleja principalmente las necesidades de un servidor web, la arquitectura Nginx permite que el servidor se use como un proxy. Por lo tanto, Nginx trata principalmente con URI.

Nginx utiliza bloques de servidor y ubicación como bloques de configuración principales:

  • Un bloque de servidor es un subconjunto del archivo de configuración que define el servidor virtual para el manejo de solicitudes. Dado que los servidores virtuales se pueden asignar para manejar tipos de conexión específicos, los administradores del servidor pueden asignar diferentes bloques para diferentes nombres de dominio, puertos y direcciones IP.
  • Un bloque de ubicación es parte de un bloque de servidor que maneja las solicitudes de varios recursos y URI. Enruta las solicitudes a la ubicación correcta en el sistema de archivos.

Dado que varios bloques pueden actuar como instancias de servidor web individuales, Nginx tiene un sistema para encontrar la mejor coincidencia para cada solicitud. Esto se realiza usando el listen directiva, que encuentra posibles coincidencias de bloques, y la directiva server_name directiva, que elige la mejor coincidencia.

Cuando Nginx trabaja con archivos estáticos, asigna solicitudes al sistema de archivos. Sin embargo, el servidor realiza esto solo después de seleccionar el servidor y los bloques de ubicación y conectar la raíz del documento y el URI. El hecho de que Nginx no se ocupe del sistema de archivos hasta que esté listo para atender la solicitud es una de las razones por las que no presenta un .htaccess archivo equivalente.

Almacenamiento en caché

Apache ofrece almacenamiento en caché para mejorar el rendimiento de un servidor. Hay tres tipos de almacenamiento en caché:

  • Caché HTTP RFC2616 de tres estados ofrece almacenamiento en caché inteligente compatible con HTTP cuando se trata de contenido proxy o contenido dinámico almacenado localmente.
  • Almacenamiento en caché de objetos compartidos clave/valor de dos estados ofrece caché de objetos compartidos basada en clave/valor.
  • Almacenamiento en caché de archivos especializado permite precargar archivos al inicio, lo que mejora los tiempos de acceso a los archivos que se necesitan con frecuencia.

Nginx logra tiempos de carga más rápidos y reduce la carga del servidor mediante el almacenamiento en caché de contenido dinámico para un acceso rápido. Si bien el almacenamiento en caché ayuda a acelerar los sitios web con mucho tráfico y volumen de contenido, no se recomienda en otros escenarios.

El almacenamiento en caché básico en Nginx usa solo dos directivas:

  • proxy_cache_path para establecer la ruta de caché y la configuración y
  • proxy_cache para activar el caché.

Una característica útil de Nginx es la capacidad de configurar el servidor para mostrar el contenido del sitio web en caché cuando el servidor está inactivo u ocupado.

Seguridad

Apache y Nginx se consideran seguros. Los posibles riesgos de seguridad se derivan principalmente de una mala configuración. Por lo tanto, siga las mejores prácticas de seguridad del servidor web para mejorar la seguridad:

Para Apache :

  • Ajuste la configuración para evitar ataques DoS. Algunas de las directivas relevantes para esto son RequestReadTimeout , KeepAliveTimeout y TimeOut .
  • Ajuste los permisos en ServerRoot directorios.
  • Tenga cuidado con las inclusiones del lado del servidor (SSI).
  • Tenga cuidado con los scripts CGI.
  • Proteja la configuración del sistema contra .htaccess anula configurando el archivo de configuración del servidor.
  • Cuide sus registros.
  • Mantenga el servidor actualizado.

Para Nginx :

  • Reduzca el riesgo de posibles explotaciones de vulnerabilidades al deshabilitar módulos no deseados.
  • Deshabilitar los server_tokens directiva, que hace que su versión de Nginx sea públicamente visible.
  • Deshabilitar métodos HTTP innecesarios.
  • Controle los recursos y los límites para evitar posibles ataques DoS.
  • Establezca, configure y supervise los registros de acceso y error para comprender mejor el estado del servidor.
  • Incluir encabezados de seguridad.
  • Mantenga el servidor actualizado.

Soporte y Documentación

Apache ofrece soporte a la comunidad a través de la lista de correo de usuarios del servidor Apache HTTP. El soporte también está disponible en canales IRC dedicados, Stack Overflow, etc.

La documentación del servidor Apache HTTP ofrece manuales de referencia, guías de usuario, tutoriales y otros documentos.

Nginx ofrece soporte comunitario, que consiste en una lista de correo y un foro operados por la comunidad, así como otros recursos de soporte, como la Guía de administración y la Guía de referencia de módulos. El soporte comercial está disponible para la opción paga, NGINX Plus.

La documentación de código abierto de Nginx incluye instrucciones de instalación, procedimientos, guías de desarrollo, referencias de módulos y otros documentos.

Apache o Nginx

Los datos de investigación de cuota de mercado más recientes muestran que Apache está ligeramente por delante de Nginx.

Sin embargo, si solo observamos los 1000 mejores sitios web clasificados, Nginx está adelante por un amplio margen.

Tanto Apache como Nginx son servidores pulidos y de buen rendimiento. Al elegir el servidor adecuado para instalar en su hardware, debe considerar para qué lo utilizará.

Elija Apache sobre Nginx si:

  • En su caso de uso, es preferible que los usuarios sin privilegios tengan control sobre sus sitios web. Uno de esos casos es la gestión de un entorno de alojamiento compartido, en el que .htaccess de Apache el archivo se vuelve prácticamente indispensable.
  • Necesita ciertos módulos que Nginx no admite.

Elija Nginx sobre Apache si:

  • Su escenario de uso incluye principalmente (o exclusivamente) servir contenido estático.
  • Espera un alto volumen de tráfico en su sitio web.

Cuándo usar tanto Nginx como Apache

Apache y Nginx se pueden usar en paralelo para crear un servidor optimizado para la carga de trabajo. Nginx está configurado para actuar como un proxy inverso para Apache, lo que aprovecha la velocidad de procesamiento y la capacidad de Nginx para manejar grandes volúmenes de tráfico. Nginx procesa y sirve contenido estático mientras reenvía contenido dinámico a Apache.

Al permitir que Nginx clasifique las solicitudes y procese las que puede manejar solo, Apache recibe un volumen menor de solicitudes. Eso resuelve de forma preventiva posibles problemas de sobrecarga. Dado que Nginx puede comunicarse con un grupo de servidores en el backend, se pueden agregar más servidores y escalar fácilmente.


Ubuntu
  1. PostgreSQL Vs MySQL:una comparación detallada

  2. Hadoop vs Spark:comparación detallada

  3. Apache vs Nginx:qué servidor web debe elegir

  4. Instalar WordPress en Nginx Ubuntu

  5. Instalar Apache en CentOS 8

Cómo instalar InvoiceNinja en un servidor Ubuntu 18.04 con Apache/Nginx

Instale Matomo Web Analytics (Piwik) en Ubuntu 18.04 con Apache/Nginx

Instale Matomo Web Analytics (Piwik) en Ubuntu 20.04 con Apache/Nginx

Cómo instalar InvoiceNinja en un servidor Ubuntu 20.04 con Apache/Nginx

Cómo instalar Nginx en Ubuntu

Cómo configurar Nginx Cache en un servidor LAMP

    Categorías Apache Nginx
    Coste Disponible sin cargo El producto principal, OSS Nginx, está disponible de forma gratuita.

    Nginx Plus es una opción de pago que incluye soporte y funciones adicionales.
    Licencias Licencia Apache 2.0 Licencia BSD de 2 cláusulas
    Escrito C, XML C
    Sistemas operativos Linux, Microsoft Windows, otros sistemas similares a Unix, OpenVMS Linux, macOS, Microsoft Windows, otros sistemas similares a Unix, HP-UX, IBM AIX
    Arquitectura Modular, basado en procesos/con subprocesos Modular, basado en eventos
    Configuración Distribuido Centralizado
    Interpretación Principalmente basado en archivos Principalmente basado en URI
    Características - Módulos multiprocesamiento
    - Soporte de configuración por directorio
    - Proxy inverso con almacenamiento en caché
    - Equilibrio de carga compatible con IPv6
    - Soporta HTTP/2
    - Compatibilidad con XML Compatibilidad con FTP (con un módulo separado)
    - Sirviendo archivos estáticos y de índice
    - Caché de descriptor de archivo abierto
    - Proxy inverso acelerado con almacenamiento en caché
    - Balanceo de carga y tolerancia a fallas
    - Compatible con IPv6, no habilitado de forma predeterminada
    - Soporta HTTP/2
    - Proxy de correo
    - Almacenamiento en caché HTTP
    Soporte - Documentación del servidor HTTP Apache
    - Lista de usuarios del servidor Apache HTTP
    -IRC
    - Desbordamiento de pila
    - Soporte comercial de proveedores externos
    - Lista de correo gestionada por la comunidad
    -IRC
    - Desbordamiento de pila
    - Soporte oficial pagado para Nginx Plus