¿Por qué encuentro Nginx prácticamente mejor que Apache?


Según la última encuesta de servidores web realizada por Netcraft, realizada a fines 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 de código abierto gratuito para sistemas operativos tipo Unix y Windows. Fue diseñado para ser un servidor seguro, eficiente y extensible que proporciona servicios HTTP en sincronización con los estándares HTTP vigentes.

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 Linux y el ecosistema de código abierto. Los nuevos usuarios de Linux normalmente encuentran que es más fácil de configurar y usar.

Nginx (pronunciado ' Engine-x ') es un servidor HTTP de código abierto, alto rendimiento, gratuito, proxy inverso y un servidor proxy IMAP/POP3. Al igual que Apache, también se ejecuta en sistemas operativos similares a 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 tan popular y su uso en Internet se dirige a mayores alturas. Ahora es el servidor web de elección entre los administradores de sistemas con experiencia o los maestros web de los mejores sitios.

Algunos de los sitios ocupados impulsados ​​por :

  • Apache are: PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com plus lots more.
  • Nginx are: Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud and many others.

Hay numerosos recursos ya publicados en la web relacionados con la comparación entre los artículos Apache y Nginx (realmente me refiero a los artículos Apache Vs Nginx ), muchos de los cuales se explican claramente en detalle, sus principales funciones y operaciones en varios escenarios, incluidas las medidas de rendimiento en los parámetros de laboratorio. Por lo tanto, eso no será tratado aquí.

Simplemente compartiré mi experiencia y pensamientos sobre todo el debate, probando Apache y Nginx , ambos en entornos de producción basados ​​en los requisitos para hospedar aplicaciones web modernas, en el próximo sección.

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

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

Nginx es uno de los servidores web ligeros que existen. Tiene pequeñas huellas en un sistema en comparación con Apache, que implementa una amplia gama de funciones necesarias para ejecutar una aplicación.

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

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

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

Tiene un proceso maestro (que realiza las operaciones privilegiadas, como la lectura de la configuración y el enlace a los puertos) y que crea varios procesos de trabajo y ayuda.

Los procesos de trabajo pueden 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 las 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 más rápido y favorable para las aplicaciones modernas. Además, se pueden usar módulos de terceros para extender las funcionalidades nativas en Nginx.

Nginx tiene una estructura de archivo de configuración simple, por lo que es muy fácil de configurar. Consiste en módulos que son 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 con 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 consiste en el 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 de inclusión, 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 me las arreglé para configurar fácilmente Nginx para ejecutar varios sitios web con diferentes versiones de PHP, lo cual fue un pequeño desafío para Apache.

Uno de los usos comunes de Nginx es configurarlo como un 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 solicitud de 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 las respuestas de los servidores proxy y las pasa a los clientes. Es más fácil de configurar como un servidor proxy en comparación con Apache, ya que en la mayoría de los casos los módulos necesarios están habilitados de forma predeterminada.

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

Si bien el servidor Nodejs (específicamente los marcos de Node) ha incorporado funciones para el manejo de archivos estáticos, no necesita realizar un procesamiento intensivo para entregar contenido no dinámico, por lo tanto, es prácticamente beneficioso configurar el servidor web para que sirva contenido estático directamente a clientela.

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

Para obtener un alto rendimiento y tiempo de actividad para las aplicaciones web modernas, puede ser necesario ejecutar múltiples instancias de aplicaciones en servidores HTTP únicos o distribuidos. Esto puede a su vez 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 fallas, en múltiples instancias de aplicaciones.

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

  • round-robin (default method) – requests to the upstream servers are distributed in a round-robin fashion (in order of the list of servers in the upstream pool).
  • least-connected – here the next request is proxied to the server with the least number of active connections.
  • ip-hash – here a hash-function is used to determine what server should be selected for the next request (based on the client’s IP address).
  • Generic hash – under this method, the system administrator specifies a hash (or key) with the given text, variables of the request or runtime, or their combination. For example, the key may be a source IP and port, or URI. Nginx then distributes the load amongst the upstream servers by generating a hash for the current request and placing it against the upstream servers.
  • Least time (Nginx Plus) – assigns the next request to the upstream server with the least number of current connections but favors the servers with the lowest average response times.

Además, Nginx es altamente escalable y las aplicaciones web modernas, especialmente las aplicaciones empresariales, demandan tecnología que proporcione alto rendimiento y escalabilidad.

Una compañía que se beneficia de las increíbles funciones de escalabilidad de Nginx es CloudFlare , ha logrado escalar sus aplicaciones web para manejar más de 15 mil millones de visitas mensuales con una infraestructura relativamente modesta, según Matthew Prince strong>, cofundador y CEO de CloudFare .

Para una explicación más completa, echa un vistazo a este artículo en el blog de Nginx: NGINX vs. Apache: nuestra visión de una pregunta de hace décadas.

Ambos Apache y Nginx no pueden ser reemplazados entre sí, tienen sus puntos fuertes y débiles. Sin embargo, Nginx ofrece una tecnología potente, flexible, escalable y segura para alimentar de manera confiable y eficiente los 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.