Nginx
Last updated
Was this helpful?
Last updated
Was this helpful?
Es un software libre y de código abierto bajo licencia BSD con una versión comercial distribuida bajo el nombre de Nginx. Su creador es
Se trata de un servidor web ligero que sirve de proxy para protocolos de correo electrónico: IMAP - POP3 y es multiplataforma, con lo cual corre en sistemas tipo Unix: GNU/Linux, BSD, Solaris, Mac OS, Windows.
El sistema es usado por sitios web como: Wordpress, Netflix, GitHub, SourceForge, entre otros.
Siendo un servidor web open source ofrece contenido estático de un sitio web de una forma rápida y fácil de configurar. También ofrece:
Recursos de equilibrio de carga, proxy inverso y de streaming.
Permite gestionar miles de conexiones simultáneas.
Brinda mayor velocidad y escalabilidad.
nos brinda datos de comparación estadística del uso de los servidores web y NGinx ocupa ya el segundo lugar, detrás de Apache y el IIS de Microsoft.
Si deseas un servidor web que no tengas que preocuparse por la cantidad de conexiones simultáneas realizadas al , debes conocer NGINX.
Por cierto, esta es solo una de sus muchas características, ya que también ofrece recursos como el equilibrador de carga HTTP, el proxy inverso y más.
Según los datos de la comparación estadística sobre el uso de servidores web realizada por el sitio web , NGINX ocupa el segundo lugar, con un 30,7% de los sitios que utilizan esta tecnología.
tiene 43.1% y Microsoft IIS, 8%. Es una posición excelente, ya que ha estado en el mercado por menos tiempo que las otras opciones.
Para que comprendas por qué NGINX sigue creciendo y sepas como crear un sitio web que procese múltiples conexiones simultáneas, hicimos este artículo con los siguientes temas:
¿Qué es NGINX?
¿Cuándo llegó y quién lo lanzó?
¿Cómo funciona?
¿Cuáles son sus características?
¿Por qué usar el servidor web NGINX?
¿Cuáles son las diferencias entre NGINX y Apache;
¿Quieres saber más sobre esta tecnología? ¡Sigue leyendo!
NGINX es un servidor web open source, de alta performance. Cuenta con una arquitectura avanzada basada en eventos — EBA, o Event-Based Architecture. Esta característica permite numerosas conexiones simultáneas, lo que proporciona más velocidad y escalabilidad.
NGINX entrega el contenido estático del sitio web rápidamente, es fácil de configurar y tiene un bajo consumo de recursos.
Su desarrollador fue el ingeniero de software Igor Sysoev, quien escribió NGINX en lenguaje C en 2002. La pronunciación correcta del nombre del servidor es "Engine-X" y su primera versión pública fue lanzada en 2004.
NGINX tiene una arquitectura modular extensible que facilita la extensión de recursos para aquellos que desean cambiar su código fuente.
El módulo principal es responsable de manejar la conexión y, además, hay una serie de módulos para diferentes tipos de procesamiento.
Algunas de las características fundamentales son:
Balanceo de carga: Se trata de un recurso importante para quienes necesitan de un sitio web con alta disponibilidad, ya que permite la distribución de solicitudes de servicio entre servidores. De esa manera, cuando hay un aumento en las solicitudes al servidor, como un aumento en el tráfico, NGINX puede dirigir el flujo a otros servidores que están en el archivo de configuración.
Proxy inverso: Actúa como un servidor intermediario entre las computadoras en una red y el servidor web. Se utiliza como caché de página para ahorrar recursos de banda y acelerar la carga. El proxy inverso es un servidor web que recibe solicitudes de conexión y administra lo que se requerirá en el servidor principal o verifica si la solicitud ya está disponible en caché.
Streaming: Ofrece un módulo nativo para streaming y permite una serie de configuraciones sobre cómo el servidor maneja el contenido MP4 y FLV, como el tamaño del buffer utilizado, el tiempo de timeout, etc.
Sin embargo, NGINX funciona basado en eventos, esto es: en lugar de hacer una solicitud directa al servidor, éste ejecuta un proceso maestro que se denomina worker
, así como varios procesos de trabajo llamados conexiones worker
.
En el momento que haya una solicitud de procesamiento, se realizan las conexiones worker, que realizan la solicitud al proceso maestro, que a su vez procesa y devuelve el resultado. Esto permite poder manejar numerosas conexiones simultáneas, dado que cada conexión worker
es capaz de procesar 1024 solicitudes.
Entre las características que ofrece NGinx como servidor web y que lo hacen "apetecible" tenemos:
Velocidad: Dado que su arquitectura se basa en eventos, las solicitudes al servidor se realizan más rápido, dado que hay un mejor uso de los recursos de memoria y CPU. Por otra parte, ofrece un excelente performance al poner a disposición archivos estáticos, como documentos, imágenes, archivos HTML, etc.
Escalabilidad: Ofrece recursos como el equilibrio de carga, con lo cual el servidor permite una escalada rápida de solicitudes en diferentes situaciones, lo que lo convierte enuna excelente alternativa para usar en aplicaciones en la nube.
Compatibilidad: Ofrece compatibilidad con diversas aplicaciones web como WordPress, Joomla, Python, etc.
Fácil configuración: Funciona según las políticas que deben especificarse en el archivo de configuración.
Funciona en Unix, Linux y WIndows, pero tiene un funcionamiento inferior en éste último.
Funciona en Unix, Linux y Windows.
Configuración centralizada en el archivo nginx.conf y los módulos se cargan de manera dinámica.
Configuración descentralizada: utiliza el archivo .htaccess y la carga de los módulos se realiza durante la ejecución.
Capacidad de operar con miles de conexiones simultáneas, al doble de la velocidad requerida en Apache
Sigue siendo un servidor web popular
Consume menos memoria para el contenido estático.
Mayor flexibilidad, dado que admite la personalización de conexiones a través de .htaccess.
Ofrece equilibrio de carga, proxy inverso
Está pensado para ser instalado en cualquier servidor dedicado, estructura cloud o VPS, ya que es necesario tener acceso como administrador para poder llevar a cabo la instalación de este servidor web.
Aquí veremos el proceso de instalación de nginx en un servidor de Ubuntu, aunque el proceso de instalación en otro sistema operativo es muy parecido.
Para instalar nginx tenemos que hacer:
Cuando se haya completado la instalación, tenemos que arrancar el servicio. Para ello ejecutamos:
Para comprobar que el servidor está funcionando, en nuestro navegador podemos escribir la dirección “localhost”. Si todo está correcto deberíamos ver una página de bienvenida similar a la siguiente.
Una vez instalado nginx ya podremos utilizarlo pero podemos mejorar su rendimiento editando el archivo nginx.conf que se encuentra en /etc/nginx
.
Igualmente tienes la posibilidad de acceder al manual de nginx desde:
Directivas que podemos modificar:
Worker_processes: el valor indicado en esta directiva podrá determinar el número máximo de procesos simultáneos que va a poder gestionar el servidor web. Para ello, es necesario conocer el número de procesos que puede gestionar nuestro equipo. Podemos hacer uso de la siguiente instrucción y el valor que nos devuelva, sería el que indicaremos en esta directiva:
Directiva worker_connections: el valor que determina el número máximo de conexiones que puede tener el sitio. Si nuestro sitio tiene un elevado número de visitas, es recomendable aumentar este valor. Por defecto viene configurado con el valor de 768, pero se puede modificar y poner un valor superior, por ejemplo 1024.
Directiva keepalive_timeout: Se trata de una directiva que se utiliza para mantener la conexión abierta durante un cierto número de solicitudes al servidor o hasta que expire el período de tiempo de espera de la solicitud. Según los desarrolladores de Nginx, 10 000 conexiones inactivas usarían solo 2,5 MB de memoria, lo que demuestra que Nginx es excepcionalmente bueno para manejar conexiones inactivas debido a las conexiones keepalive. Adicionalmente, tiene gran influencia en la percepción del tiempo de carga por parte del usuario final y se puede utilizar esta opción para optimizar el tiempo de carga de un sitio web. Dado que la creación de nuevas conexiones TCP puede consumir gran cantidad de recursos, como memoria y uso de CPU el hecho de mantener viva su conexión en Nginx permite reducir este consumo. Siendo una de las razones por la que se recomienda el uso de keepalive para las conexiones HTTPS. Habilitar el keepalive puede ayudarlo a mejorar la experiencia del usuario y el rendimiento del sitio web. Permite que el navegador cargue el contenido de la página con una sola conexión TCP. Otro beneficio es que mejora la velocidad de la página web debido a su capacidad para entregar varios archivos a través de la misma conexión, lo que reduce la latencia y acelera la carga de las páginas web.
Nginx permite ampliar su funcionalidad por medio del uso de módulos. Algunos de los módulos más importantes que nos podemos encontrar son:
HTTP Referer. Filtra peticiones recibidas en función de la cabecera Referer.
HTTP Limit Zone. Limita el número de conexiones simultáneas desde un mismo cliente.
User ID. Proporciona cookies identificativas.
FLV. Permite reproducir vídeo en streaming.
Perl. Módulo que permite ejecutar Perl directamente dentro de Nginx.
Secure Link. Este módulo ofrece la posibilidad de proteger páginas mediante clave secreta.
Para iniciar Nginx, puedes ejecutar el archivo ejecutable. Una vez que se inicia Nginx, se puede controlar invocando el ejecutable con el parámetro -s. Para ello utiliza la siguiente sintaxis:
Donde signal
se refiere a:
stop: apagado rápido
quit: apagado correcto
reload: recargar el archivo de configuración
reopen: reabrir los archivos de registro
Por ejemplo:
Para detener los procesos de nginx, se puede ejecutar el siguiente comando, desde el mismo usuario que inició el servicio de nginx:
Si hemos modificado uno de los archivos de configuración, los cambios no surten efecto hasta que se reinicie el servicio, para ello:
También se puede enviar una señal a los procesos nginx con la ayuda de herramientas de Unix, como la utilidad kill
. En este caso, una señal se envía directamente a un proceso con una ID de proceso dada. El ID de proceso del proceso maestro de nginx se escribe, de manera predeterminada, en nginx.pid en el directorio /usr/local/nginx/logs
o /var/run
. Por ejemplo, si el ID del proceso maestro es 1429, puedes ejecutar:
Si queremos obtener la lista de todos los procesos de nginx que se están ejecutando, se puede usar la utilidad ps
, por ejemplo, de la siguiente manera:
Por último, una opción útil en nginx sería:
Te permite verificar si las directivas utilizadas en los archivos de configuración de nginx están correctas o no.
Si quieres probar el funcionamiento de nginx puedes crear o subir un sitio web en la carpeta:
Creamos un archivo con el mismo nombre example.com en /etc/nginx/sites-available/example.com
Y dentro escribimos:
Ahora vamos a crear un enlace entre el directorio y el archivo para habilitarlo:
De modo que obtengas algo así:
Volviendo al sitio web, puedes comenzar por crear una carpeta que contenga todos los archivos e imágenes:
Podemos modificar el dueño y grupo de la carpeta creada haciendo:
Podemos asignar permisos con el comando:
Y crear la página de ejemplo:
Y si accedemos a nuestra página web podemos verla. Eso sí, nos hace la advertencia de que no es un sitio seguro y si no tenemos configurado el DNS tampoco podremos acceder a la misma de otro modo que no sea a través de la IP.
Para poder subir un contenido web en nuestra instalación de nginx de docker tenemos que copiar cada archivo al path correspondiente dentro del container o bien crear volumen.
Vamos a suponer que tengo simplemente el archivo index.html que hemos creado en la sección anterior. Entonces,
Si estamos en Alpine linux podemos utilizar el siguiente comando de docker para ver los contenedores activos que tenemos en nuestro servidor:
De este modo podemos ver también la ID del contenedor de nginx:
Para copiar el archivo index.html en la ubicación del contenedor de nginx:
Debido a todas estas características, el servidor es utilizado por grandes compañías como Microsoft, IBM, Google, , entre otras.
El desafío, conocido como C10K, era crear un servidor web que pudiera manejar 10 mil conexiones simultáneamente para entregar un producto que pudiera trabajar con el conjunto de referencia para la web moderna, sin embargo, con la , ese número se ha vuelto aún mayor.
En servidores web como , las solicitudes web funcionan de manera individual: un usuario solicita una página a través del protocolo HTTP o HTTPS, se procesa y se devuelve el resultado. Este proceso se realiza desde el servidor para cada solicitud.
WebDAV. Ofrece soporte para .
XSLT. Funcionalidad que permite el post-procesamiento de páginas mediante