Búsqueda de sitios web

Por qué encuentro Nginx prácticamente mejor que Apache


Según la última encuesta de servidores web de Netcraft, realizada a finales de 2017 (precisamente en noviembre), Apache y Nginx son los servidores web de código abierto más utilizados en Internet.

Apache es un servidor HTTP gratuito y de código abierto para sistemas operativos tipo Unix y Windows. Fue diseñado para ser un servidor seguro, eficiente y extensible que proporcione servicios HTTP sincronizados con los estándares HTTP predominantes.

Desde su lanzamiento, Apache ha sido el servidor web más popular en Internet desde 1996. Es el estándar de facto para servidores web en el ecosistema Linux y de código abierto. A los nuevos usuarios de Linux normalmente les resulta más fácil de configurar y utilizar.

Nginx (pronunciado "Engine-x") es un servidor HTTP, proxy inverso y servidor proxy IMAP/POP3 gratuito, de código abierto y de alto rendimiento. Al igual que Apache, también se ejecuta en sistemas operativos tipo Unix y Windows.

Bien conocido por su alto rendimiento, estabilidad, configuración simple y bajo consumo de recursos, a lo largo de los años se ha vuelto muy popular y su uso en Internet se dirige a mayores alturas. Ahora es el servidor web preferido entre los administradores de sistemas experimentados o los webmasters de los mejores sitios.

Algunos de los sitios más concurridos impulsados por:

  • Apache son: PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com y muchos más.
  • Nginx son: Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud y muchos otros.

Ya existen numerosos recursos publicados en la web sobre la comparación entre Apache y Nginx (realmente me refiero a los artículos 'Apache Vs Nginx'), muchos de los cuales explican claramente en detalle sus principales características y operaciones en varios escenarios, incluidas medidas de rendimiento en puntos de referencia de laboratorio. Por lo tanto, esto no se abordará aquí.

Simplemente compartiré mi experiencia y mis pensamientos sobre todo el debate, después de haber probado Apache y Nginx, ambos en entornos de producción basados en los requisitos para alojar aplicaciones web modernas, en la próxima sección.

Razones por las que encuentro Nginx prácticamente mejor que Apache

Las siguientes son las razones por las que prefiero el servidor web Nginx a Apache para la entrega de contenido web moderno:

1. Nginx es liviano

Nginx es uno de los servidores web livianos que existen. Tiene una huella pequeña en un sistema en comparación con Apache, que implementa una amplia gama de funcionalidades necesarias para ejecutar una aplicación.

Debido a que Nginx reúne un puñado de funciones principales, se basa en servidores web ascendentes dedicados de terceros, como servidores Apache, FastCGI, Memcached, SCGI y uWSGI o servidores de aplicaciones, es decir, servidores de idiomas específicos como Node.js, Tomcat. , etc.

Por lo tanto, su uso de memoria es mucho más adecuado para implementaciones de recursos limitados que Apache.

2. Nginx está diseñado para una alta concurrencia

A diferencia de la arquitectura orientada a procesos o subprocesos de Apache (modelo de proceso por conexión o subproceso por conexión), Nginx utiliza una arquitectura escalable, basada en eventos (asincrónica). Emplea un modelo de proceso responsable que se adapta a los recursos de hardware disponibles.

Tiene un proceso maestro (que realiza operaciones privilegiadas como leer la configuración y vincular puertos) y que crea varios procesos de trabajo y auxiliares.

Cada uno de los procesos de trabajo puede manejar miles de conexiones HTTP simultáneamente, leer y escribir contenido en el disco y comunicarse con servidores ascendentes. Los procesos auxiliares (administrador de caché y cargador de caché) pueden administrar operaciones de almacenamiento en caché de contenido en disco.

Esto hace que sus operaciones sean escalables y resulten en un alto rendimiento. Este enfoque de diseño lo hace además rápido y favorable para aplicaciones modernas. Además, se pueden utilizar módulos de terceros para ampliar las funcionalidades nativas de Nginx.

3. Nginx es fácil de configurar

Nginx tiene una estructura de archivos de configuración simple, lo que lo hace muy fácil de configurar. Consta de módulos que están controlados por directivas especificadas en el archivo de configuración. Además, las directivas se dividen en directivas de bloque y directivas simples.

Una directiva de bloque se define entre llaves ({ y }). Si una directiva de bloque puede tener otras directivas entre llaves, se denomina contexto, como eventos, http, servidor y ubicación.

http {
	server {
		
	}
}

Una directiva simple consta del nombre y los parámetros separados por espacios y termina con un punto y coma (;).

http {
	server {
		location / {
				
				## this is simple directive called root
			   	root  /var/www/hmtl/example.com/;

		}
		
	}
}

Puede incluir archivos de configuración personalizados utilizando la directiva include, por ejemplo.

http {
	server {

	}
	## examples of including additional config files
	include  /path/to/config/file/*.conf;
	include  /path/to/config/file/ssl.conf;
}

Un ejemplo práctico para mí fue cómo logré configurar fácilmente Nginx para ejecutar múltiples sitios web con diferentes versiones de PHP, lo cual fue un desafío con Apache.

4. Nginx es un excelente proxy frontal

Uno de los usos comunes de Nginx es configurarlo como servidor proxy; en este caso recibe solicitudes HTTP de los clientes y las pasa a servidores proxy o ascendentes que se mencionaron anteriormente, a través de diferentes protocolos. También puede modificar los encabezados de las solicitudes de los clientes que se envían al servidor proxy y configurar el almacenamiento en búfer de las respuestas provenientes de los servidores proxy.

Luego recibe respuestas de los servidores proxy y las pasa a los clientes. Es mucho más fácil de configurar como servidor proxy en comparación con Apache, ya que los módulos necesarios en la mayoría de los casos están habilitados de forma predeterminada.

5. Nginx se destaca por ofrecer contenido estático

El contenido o los archivos estáticos suelen ser archivos almacenados en el disco de la computadora servidor, por ejemplo, archivos CSS, archivos JavaScript o imágenes. Consideremos un escenario en el que utiliza Nginx como interfaz para Nodejs (el servidor de aplicaciones).

Aunque el servidor Nodejs (específicamente los frameworks Node) tienen funciones integradas para el manejo de archivos estáticos, no necesitan realizar un procesamiento intensivo para entregar contenido no dinámico, por lo que es prácticamente beneficioso configurar el servidor web para que sirva contenido estático directamente a clientela.

Nginx puede realizar un trabajo mucho mejor al manejar archivos estáticos desde un directorio específico y puede evitar que las solicitudes de activos estáticos obstaculicen los procesos ascendentes del servidor. Esto mejora significativamente el rendimiento general de los servidores backend.

6. Nginx es un equilibrador de carga eficiente

Para lograr un alto rendimiento y tiempo de actividad para las aplicaciones web modernas, es posible que sea necesario ejecutar varias instancias de aplicaciones en un servidor HTTP único o distribuido. Esto, a su vez, puede requerir la configuración del equilibrio de carga para distribuir la carga entre sus servidores HTTP.

Hoy en día, el equilibrio de carga se ha convertido en un enfoque ampliamente utilizado para optimizar la utilización de recursos del sistema operativo, maximizar la flexibilidad, reducir la latencia, aumentar el rendimiento, lograr redundancia y establecer configuraciones tolerantes a fallos en múltiples instancias de aplicaciones.

Nginx utiliza los siguientes métodos de equilibrio de carga:

  • round-robin (método predeterminado): las solicitudes a los servidores ascendentes se distribuyen de forma circular (en el orden de la lista de servidores en el grupo ascendente).
  • menos conectado : aquí la siguiente solicitud se envía mediante proxy al servidor con el menor número de conexiones activas.
  • ip-hash : aquí se utiliza una función hash para determinar qué servidor se debe seleccionar para la siguiente solicitud (según la dirección IP del cliente).
  • Hash genérico: en este método, el administrador del sistema especifica un hash (o clave) con el texto dado, las variables de la solicitud o el tiempo de ejecución, o su combinación. Por ejemplo, la clave puede ser una IP y un puerto de origen, o URI. Luego, Nginx distribuye la carga entre los servidores ascendentes generando un hash para la solicitud actual y colocándolo en los servidores ascendentes.
  • Mínimo tiempo (Nginx Plus): asigna la siguiente solicitud al servidor ascendente con el menor número de conexiones actuales, pero favorece a los servidores con los tiempos de respuesta promedio más bajos.

7. Nginx es altamente escalable

Además, Nginx es una aplicación web altamente escalable y moderna, especialmente las aplicaciones empresariales, que exigen tecnología que proporcione alto rendimiento y escalabilidad.

Una empresa que se beneficia de las increíbles características de escalabilidad de Nginx es CloudFlare. Ha logrado escalar sus aplicaciones web para manejar más de 15 mil millones de páginas vistas mensuales con una infraestructura relativamente modesta, según Matthew Prince., cofundador y director ejecutivo de CloudFare.

Para obtener una explicación más completa, consulte este artículo en el blog de Nginx: NGINX vs. Apache: nuestra visión de una pregunta de hace una década.

Conclusión

Tanto Apache como Nginx no pueden ser reemplazados entre sí, tienen sus puntos fuertes y débiles. Sin embargo, Nginx ofrece una tecnología poderosa, flexible, escalable y segura para impulsar de manera confiable y eficiente sitios web y aplicaciones web modernos. ¿Cuál es tu opinión? Háganos saber a través del formulario de comentarios a continuación.