Introducción a Apache y Nginx
Los servidores web y los protocolos están diseñados para permitir a los usuarios ver páginas web. Envían una solicitud para ver un documento que es aceptada por el servidor. El host luego, esencialmente, sirve el documento o la información al espectador. El servidor web juega un papel central al permitirle ver y acceder a páginas web en su navegador.

Servidor web que facilita la comunicación entre el cliente y los servidores de aplicaciones
Hay muchos servidores web que puede utilizar para este propósito. Entre los más populares se encuentran Nginx y Apache. De hecho, estos servidores alojan la mayoría de los sitios web disponibles actualmente en Internet.
Apache y Nginx son bastante similares en muchos aspectos. Para empezar, ambos servidores web son de código abierto. Esto significa que cualquier persona en el mundo puede usarlos sin costo alguno. Pero hay muchas características que son únicas para cada uno de los servidores. Estas características especiales los hacen más adecuados para diversas aplicaciones y propósitos.
Para ayudarle a decidir qué servidor web es superior o ideal para usted, compararemos Nginx y Apache. La comparación se realizará a través de una serie de parámetros esenciales que son críticos para los usuarios de los servidores web. ¡Comencemos!
Descripción general básica
Comenzaremos con una descripción general de los dos servidores web. Tanto Apache como Nginx han construido una gran reputación en la comunidad. Son aclamados por su rendimiento y utilizados por varias organizaciones de renombre en todo el mundo.
Apache
Apache salió en 1995. Robert McCool desarrolló este servidor HTTP bajo la Apache Software Foundation, de ahí el nombre. Desde su lanzamiento, cientos de miles de personas en todo el mundo han estado usando Apache.
Su gran popularidad significa que una gran cantidad de software y fuentes de terceros colaboran con él con frecuencia. Por lo tanto, si está buscando una buena red de soporte con muchas integraciones, Apache es el ideal para usted. Apache también es preferible para many personas porque es más dinámico y flexible. También ofrece una mayor variedad de lenguajes que puede interpretar.
Nginx
Nginx es un servidor web relativamente más nuevo, lanzado en 2004. Es el resultado de los esfuerzos de Igor Syosev para lidiar con algo que ahora se conoce como el problema C10K. Este problema surgió cuando comenzó a ser difícil para los servidores manejar grandes cantidades de tráfico. A medida que más y más personas comenzaron a usar Internet, los servidores de los sitios web comenzaron a verse abrumados. La incapacidad de estos servidores para manejar varios miles de conexiones al mismo tiempo hizo que los sitios colapsaran y fallaran.
Nginx fue lanzado para intentar resolver este problema. Es por eso que su arquitectura tiene un diseño increíblemente ligero, que es capaz de funcionar con recursos y hardware limitados. Si bien es más adecuado para funcionar con contenido estático, también puede integrarse con software que pueda manejar adecuadamente el contenido dinámico.
Capacidades de manejo de tráfico
Ahora que tenemos una idea básica de cada uno de los servidores, podemos profundizar en más detalles. El primer aspecto con el que comenzaremos son las capacidades de tráfico y manejo de los servidores individuales. Este es uno de los puntos principales que separa a estas dos plataformas. Sus arquitecturas funcionan bajo principios diferentes cuando se trata de manejar múltiples conexiones simultáneamente.
Apache
Apache utiliza algo llamado MPM - Módulos de multiprocesamientoLos administradores utilizan una variedad de MPM para manipular y modificar la arquitectura de manejo de conexiones. Parte del atractivo del servidor web Apache es la flexibilidad que ofrece su arquitectura. Una infraestructura basada en módulos que divide el procesamiento en hilos individuales y grupos de hilos facilita la escalabilidad y la adaptación a diferentes tipos de conexiones.
Echemos un vistazo a algunos de los módulos individuales utilizados en Apache:
- mpm_prefork
El primero es mpm_prefork. Este es un módulo de procesamiento que se encarga de gestionar las solicitudes entrantes de los visitantes. Crea un hilo o proceso hijo para manejar una conexión en cualquier momento dado. Eso significa que si el número de solicitudes es menor que el número de procesos, mpm_prefork es bastante eficiente en su función.
Las solicitudes se procesan rápidamente ya que un proceso hijo independiente procesa cada una de ellas de forma individual. Pero esto también significa que si el número de solicitudes supera el número de procesos, puede ralentizar las cosas considerablemente. Como resultado, el paso de procesamiento de solicitudes consume mucha memoria RAM.
- mpm_worker
Como ya sabemos, un hilo es responsable de una conexión. Este módulo va un paso más allá y le permite administrar múltiples hilos a la vez. Este es un módulo mucho más escalable en comparación con mpm_prefork, que tiene dificultades más allá de cierto umbral. Las nuevas conexiones pueden acoplarse a un hilo de inmediato en lugar de tener que esperar.
- mpm_event
Mpm_event se encarga de mantener las conexiones keep-alive. El propósito principal de este módulo es evitar que el sistema se sature debido a las solicitudes keep-alive. Lo hace asignando un hilo a una conexión incluso sin la presencia de una solicitud activa. El hilo permanecerá dedicado mientras la conexión esté activa. Cualquier solicitud entrante se transfiere a hilos desocupados.
Nginx
A diferencia de Apache, Nginx fue diseñado con un propósito muy específico en mente. Ya conocíamos los problemas que surgían con la conexión y la escalabilidad a este nivel. Es por eso que utiliza un algoritmo que es asíncrono y no bloqueante. No dedica hilos individuales para cada conexión. En su lugar, Nginx produce numerosos procesos de trabajo que son capaces de manejar miles de conexiones a la vez.
El principio de funcionamiento detrás de la arquitectura de Nginx es el mecanismo de bucle rápido. Este algoritmo procesa constantemente eventos y los monitorea. Esto significa que los procesos están orientados a eventos y cada proceso de trabajo solo está comprometido con sus propias conexiones. Todas las conexiones de un proceso de trabajo se encuentran en un bucle de eventos. Aquí, coexisten y se procesan de forma asíncrona con las otras conexiones bajo este proceso de trabajo en particular.
El principal beneficio de una arquitectura de este tipo es que permite una gran capacidad de escalabilidad. Esto se vuelve especialmente aplicable si tiene recursos limitados o desea trabajar con un hardware mínimo. Incluso si experimenta grandes cantidades de tráfico, habrá poco impacto en el uso de la memoria RAM. Esto se debe a que no está generando hilos individuales para cada conexión.
Manejo de contenido estático y dinámico
Otro parámetro que podemos usar para comparar los dos servidores web es cómo manejan el contenido estático y dinámico.
Apache
Apache utiliza un método basado en archivos para manejar el contenido estático. Su sistema de procesamiento MPM le permite trabajar con este método convencional.
Cuando se trata de procesar contenido dinámico, Apache puede hacerlo sin necesidad de ayuda de componentes externos. Puede habilitar los procesadores dinámicos cargando un módulo. Este módulo procesará el contenido analizando el lenguaje y luego incrustando el procesador correspondiente en el proceso de trabajo.
El principal beneficio de no tener que usar componentes externos para procesar contenido dinámico es evidente durante la configuración y la coordinación. Es mucho más fácil coordinar únicamente los componentes internos entre sí.
Nginx
La mayor diferencia entre la forma en que Apache y Nginx manejan el contenido es que Nginx es simplemente incapaz de procesar contenido dinámico internamente. Debe emparejarse con un componente externo para procesar solicitudes de contenido dinámico. Esto significa que necesitará usar su servidor Nginx junto con un procesador externo. El componente recibirá la solicitud de PHP/contenido dinámico, la procesará y luego la enviará de vuelta al servidor.
Dado que la información debe transmitirse entre los dos componentes, necesitará coordinar la comunicación entre ellos. Tendrá que determinar cuántas conexiones desea permitir y configurar el protocolo. Tendrá que utilizar el protocolo que pueda ser leído y entendido por Nginx, como HTTP, FastCGI, SCGI, uWSGI o memcache, entre otros.
Por otro lado, Nginx funciona muy bien con el manejo de contenido estático. No necesita ayuda de fuentes externas para hacerlo. También solo activará el intérprete cuando lo necesite. Este es uno de los beneficios de usar Nginx. El intérprete no está integrado en el proceso. Esto significa que solo estará presente para el procesamiento de contenido dinámico.
Directorios de contenido: Configuración distribuida frente a centralizada
Cada servidor web tiene su propio directorio de contenido. Uno de los parámetros más críticos para evaluar a Apache y Nginx es si permiten o no la configuración a nivel de directorio.
Apache
Existen ciertos archivos ocultos en los directorios de contenido que contienen directivas. Estos son los archivos .htaccess. Con Apache, puede interpretar estas directivas por directorio. Por lo tanto, cuando envía una solicitud, Apache inspeccionará la ruta del archivo para encontrar un archivo .htaccess. Cuando lo haga, interpretará y aplicará las directivas que contiene de inmediato. Apache no reiniciará el servidor para implementar estas directivas.
El proceso definido anteriormente permite una configuración descentralizada de los directorios en el servidor web. La configuración descentralizada es útil para la reescritura de URL, la implementación de restricciones de acceso, la confirmación de autorizaciones y el establecimiento de políticas de almacenamiento en caché.
Uno de los beneficios del archivo .htaccess es que el usuario, que no tiene autenticación, puede controlar y modificar al menos algún aspecto del contenido que está viendo en su navegador. Es por eso que los proveedores de alojamiento compartido utilizan con frecuencia Apache. Los proveedores de servicios tienen acceso autorizado a la configuración central. Los clientes pueden ejercer control sobre ciertos directorios sin tener acceso a la configuración principal.
Si lo desea, es posible desactivar la interpretación de .htaccess en Apache.
Nginx
A diferencia de Apache, Nginx no funciona con archivos .htaccess. Esto lo hace comparativamente menos flexible. Sin embargo, Nginx aporta una serie de mejoras en su estilo de configuración en su lugar. Para empezar, es capaz de procesar solicitudes a un ritmo mucho más rápido que Apache. Esto se debe a que no busca, lee, interpreta y luego implementa cada archivo .htaccess que encuentra en su ruta. En lugar de buscar en cada directorio padre, Nginx solo realiza una búsqueda de directorio para una solicitud.
Además, Nginx tiene una gran ventaja de seguridad sobre Apache. Nginx no entrega ninguna parte de la configuración de los directorios de contenido a los usuarios individuales, a diferencia de Apache. Si bien usted puede estar manteniendo estrictas medidas de seguridad, ¿quién dice que los usuarios individuales pueden hacer lo mismo? Con Nginx, usted conserva el control sobre el estado de seguridad y la configuración de toda la red de directorios.
Interpretación de solicitudes
Otra forma de diferenciar entre los dos servidores es la forma en que interpretan las solicitudes.
Apache
Cuando el servidor recibe una solicitud, la interpreta y luego la conecta con los recursos del sistema correspondientes. Interpreta la solicitud ya sea como un recurso físico en el sistema de archivos o como una URI de ubicación.
Al interpretar como un recurso físico, utiliza los bloques <Directory> o <Files> bloques. Este es el método de interpretación predeterminado para el servidor. Toma la raíz del documento. Luego, sigue el host y el número de puerto en la solicitud para encontrar el archivo correspondiente en el árbol de documentos.
La ubicación URI, por otro lado, necesita una evaluación abstracta. Por lo tanto, Apache emplea los bloques <Location> para recursos abstractos en lugar de trabajar con el sistema de archivos.
Existen varias alternativas al uso del sistema predeterminado basado en archivos, aparte de URI. Por ejemplo, puede utilizar la directiva Alias para buscar una ubicación alternativa a la cual mapear. También puede hacer uso de variantes de expresión para flexibilizar la configuración del sistema de archivos.
Nginx
Mientras que Apache nació para ser un servidor web, Nginx cumple una doble función como servidor web y servidor proxy. Es por eso que, en lugar de inclinarse hacia el sistema de archivos, Nginx prefiere trabajar con URIs. Puede visualizar esta preferencia por el hecho de que no hay forma de especificar la configuración para un directorio del sistema de archivos en Nginx. Sin embargo, puede traducirse al sistema de archivos si y cuando sea necesario.
Server y location son los bloques de configuración que se utilizan principalmente en Nginx. El primero interpreta el host que se está solicitando. El segundo coincide con las partes de la URI después del host y el puerto. Como resultado, el servidor interpreta la solicitud como una ubicación URI en lugar de un archivo real en el sistema.
Debido a su sistema de interpretación basado en URI, Nginx puede cumplir su función como servidor web, servidor proxy y servidor de correo. Dado que no hace referencia al sistema de archivos al interpretar la solicitud, es comprensible por qué tampoco implementa archivos .htaccess.
Sistemas de módulos
Aunque tanto Apache como Nginx ofrecen sistemas de módulos de soporte para extensiones, existen algunas diferencias importantes en su funcionamiento interno.
Apache
Con Apache, puede cargar y descargar módulos dinámicamente mientras ejecuta el servidor. El núcleo permanece en el centro de los procesos y los módulos sirven para ampliar la funcionalidad. Puede utilizar estos módulos acoplables para realizar una serie de tareas. Las opciones son prácticamente infinitas con la vasta biblioteca de Apache.
De hecho, incluso puede modificar la función del núcleo del servidor utilizando módulos como mod_php. Como hemos mencionado antes, este módulo le permite incrustar un intérprete de PHP en los procesos de trabajo individuales. Esto es útil cuando necesita procesar contenido dinámico.
Pero la historia no termina ahí. También puede agregar módulos para habilitar funciones como la autenticación de clientes, el endurecimiento del servidor, el almacenamiento en caché, la reescritura de URL, los proxies, la limitación de velocidad, la compresión y el cifrado.
Nginx
El sistema de módulos de Nginx es diferente en el sentido de que no se pueden cargar dinámicamente los módulos en el servidor principal. En su lugar, deben recopilarse y compilarse en el software del núcleo. Esto deja mucho que desear en términos de flexibilidad y facilidad de uso. Aunque los paquetes de distribución tienen algunos módulos comunes, tendrá que compilar el servidor para otros módulos. Por lo tanto, debe saber cómo mantener su software compilado fuera del sistema de empaquetado tradicional.
A pesar de esto, la ventaja de este sistema de módulos no estándar es que le brinda un alto grado de especificidad. Puede personalizar sus módulos incorporando únicamente las funcionalidades que requiera. Le permite dejar atrás los componentes que no necesita y ahorrarse el riesgo de seguridad en el proceso. Al mismo tiempo, puede realizar las mismas tareas con los módulos de Nginx que con los de Apache. Estas incluyen la reescritura de URL, el registro, la autenticación, entre otras.
Ecosistema y soporte
Las integraciones y el soporte de software son muy importantes cuando se trata de servidores web. A continuación, exploraremos la compatibilidad y el soporte disponibles para Apache y Nginx.
Apache
Apache es una plataforma más antigua y popular. Por lo tanto, es comprensible que tenga una mayor variedad de herramientas y software de soporte en comparación con Nginx. Hay una gran cantidad de documentación de terceros a su disposición para dar soporte al servidor principal. No solo eso, sino que también puede combinarlo con otro software para realizar tareas específicas. Puede agregar estas herramientas a su proyecto o a su paquete. Son capaces de iniciarse fácilmente dentro del ecosistema de Apache.
Nginx
Aunque Nginx está por detrás de Apache en este aspecto, sin duda está haciendo todo lo posible por ponerse al día. Cada vez más personas eligen Nginx a medida que se dan cuenta de todo su potencial. El soporte para la plataforma sigue aumentando junto con su crecimiento orgánico como un servidor web útil y de procesamiento rápido.
Uno de los principales obstáculos de soporte que Nginx tuvo que superar fue encontrar documentación en inglés. Esto se debe a que la mayor parte de Nginx se escribió originalmente en ruso, incluida la mayor parte de su documentación. Sin embargo, a medida que el servidor se ha extendido y se ha vuelto más reconocido, ahora hay disponibles una gran cantidad de recursos de terceros en el idioma universal.
¿Una solución colaborativa?
Ahora, tienes una comprensión mucho mejor de los componentes esenciales y el funcionamiento interno de Apache y Nginx. Aunque son bastante diferentes entre sí, algunos usuarios aprovechan este hecho para obtener lo mejor de ambos mundos. Así es: es posible utilizar Apache y Nginx juntos.
Convencionalmente, los usuarios suelen utilizar Nginx como un proxy inverso y colocarlo delante de Apache. Esto permite compensar la falta de velocidad en el manejo y procesamiento de solicitudes de Apache. Nginx recibe y maneja todas las solicitudes mientras funciona a su máxima velocidad. También le permite gestionar rápidamente una gran cantidad de solicitudes de forma concurrente sin tener que invertir muchos recursos.
Otra característica de Nginx que los usuarios aprovechan es su capacidad para manejar contenido estático de manera eficiente. Para compensar el hecho de que Nginx necesita un componente externo para procesar contenido dinámico, podemos redirigir PHP y otras solicitudes relevantes a Apache a través de un proxy. Apache procesará la solicitud en una página web y la enviará de vuelta a Nginx para que pueda servir al cliente.
Aquí hay algunos recursos que puede encontrar en nuestro blog que pueden ayudarle a empezar con ambos servidores web:
Apache
- Cómo instalar el servidor Apache en Ubuntu 18.04: una guía práctica
- Configuración de hosts virtuales de Apache en Ubuntu 20.04
- Cómo instalar la pila Linux, Apache, MySQL, PHP (LAMP) en CentOS 7
- Cómo asegurar Apache con Let’s Encrypt en Ubuntu 18.04
Nginx
- Cómo instalar Nginx en Ubuntu 18.04
- Automatizar las renovaciones de certificados SSL de LetsEncrypt para Nginx
- Cómo asegurar Nginx con Let’s Encrypt en Ubuntu 20.04
- Cómo instalar la pila LEMP (Linux, Nginx, MySQL PHP) en Ubuntu 20.04
Conclusión
Al fin y al cabo, tanto Apache como Nginx tienen sus fortalezas y debilidades. No existen reglas estrictas ni recomendaciones sobre qué servidor debe utilizar para su proyecto. Usted es el mejor juez para decidir qué funciona mejor para su aplicación en función de sus requisitos únicos.
Debe identificar los aspectos y características de los que no puede prescindir y elegir en consecuencia. Si es difícil tomar la decisión, siempre puede optar por utilizar ambos servidores juntos en una solución personalizada.
¡Feliz computación!
Comentarios
Aún no hay comentarios. Sea el primero.