NGINX, el servidor web de código abierto y gratuito, es ampliamente utilizado para diversas funciones como proxy de correo, proxy inverso, balanceador de carga y caché HTTP. Aunque es relativamente nuevo en comparación con otros servidores web, NGINX se ha ganado una popularidad impresionante gracias a su alto rendimiento y ligereza. Aunque la configuración predeterminada de NGINX ya ofrece un rendimiento de alta velocidad, existen maneras de potenciar aún más su capacidad ajustando algunas de sus configuraciones.
En esta guía rápida para mejorar el rendimiento de NGINX, exploraremos varias técnicas efectivas que puedes probar. Para este artículo, hemos utilizado NGINX en el sistema AlmaLinux, pero es aplicable para CentOS, Ubuntu y RockyLinux.
Ajuste de los Procesos de Trabajo de NGINX
En NGINX, un proceso de trabajo maneja cada solicitud del servidor web. Para gestionar la solicitud, se genera un proceso de trabajo como múltiples procesos de trabajo, y un proceso maestro los administra todos y analiza la configuración.
La configuración estándar de NGINX tiene el parámetro de proceso de trabajo en automático, lo que inicia el proceso de trabajo según el núcleo de CPU disponible. Según la documentación oficial de NGINX, automático es el parámetro recomendado ya que es la forma más efectiva de mantener el proceso de trabajo según el núcleo de CPU disponible.
Si no estás seguro de cuántos núcleos tiene tu proceso, ejecuta este comando para averiguarlo:
$ grep processor /proc/cpuinfo | wc -l
Es fácil ajustar el valor predeterminado del proceso de trabajo desde el archivo de configuración de NGINX, que se encuentra en /etc/nginx/nginx.conf. Si encuentras que tu servidor se ve afectado por un nivel excesivo de tráfico, considera la posibilidad de actualizar tu servidor para tener un mayor número de núcleos de procesador.
Modificación del Número de Conexiones de Trabajo
La cantidad total de conexiones simultáneas que todos los procesos de trabajo disponibles pueden manejar se conoce como «conexión de trabajo». El proceso de trabajo puede manejar 512 conexiones al mismo tiempo por defecto, pero puedes cambiar eso.
Sin embargo, antes de ajustar el valor, verifica el sistema de conexión máxima para habilitar el uso del siguiente código para actualizar la configuración en consecuencia:
$ ulimit -n
Para potenciar al máximo NGINX, configura el valor de la conexión de trabajo al máximo permitido por el sistema en el archivo nginx.conf.
Compresión de Contenido para Mejorar el Tiempo de Entrega
Al comprimir contenido web, NGINX utiliza gzip para mejorar el tiempo de entrega del contenido y reducir el uso del ancho de banda de la red.
Puedes ver la configuración de gzip en estado comentado, pero eres libre de descomentar gzip y modificarlo según tus necesidades individuales. El proceso de compresión Gzip utiliza recursos del sistema, por lo que si tus recursos ya son limitados, considera ajustar la configuración según las necesidades. Por ejemplo, comprimir solo un cierto tipo de archivo podría funcionar.
Caché de Contenido Estático
La mayoría del contenido se sirve a los navegadores o clientes de forma estática hoy en día, y la caché de archivos estáticos garantiza que el contenido se cargue más rápidamente. Además, reducirá la solicitud de conexión de NGINX, ya que el contenido se cargará desde la caché.
Si deseas iniciar la caché, coloca el siguiente comando en tu archivo de configuración del host virtual:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;}
Al ingresar este comando, te aseguras de que el archivo de recursos se almacene en caché durante 30 días, aunque puedes configurar la fecha de caducidad de la caché según tus requisitos personales.
Ajuste del Tamaño del Búfer
El almacenamiento en búfer puede aumentar la eficiencia de la comunicación cliente-servidor al retener una parte de la respuesta mientras se llena el búfer. Cuando la respuesta es mayor que el tamaño del búfer, NGINX escribirá la respuesta en disco, lo que puede afectar negativamente el rendimiento. Pero no te preocupes: puedes cambiar el tamaño del búfer para adaptarlo a tus necesidades.
Para cambiar el tamaño del almacenamiento en búfer, coloca esto en la sección http:
http {
...
client_body_buffer_size 80k;
client_max_body_size 9m;
client_header_buffer_size 1k;
...
}
¿Qué significa cada parte?
- Client_body_buffer_size: Especifica el tamaño exacto del búfer para retener datos de respuesta del cliente.
- Client_header_buffer_size: Gestiona el tamaño del encabezado del cliente (un valor de 1k suele ser efectivo).
- Client_max_body_size: Reduce el tamaño máximo del cuerpo de respuesta del cliente: NGINX presentará un mensaje «Request Entity Too Large» cuando el tamaño del cuerpo sea mayor que su valor.
Habilitación del Almacenamiento en Búfer de Registro
El registro es crítico para la depuración de problemas y auditorías. El registro almacena datos sobre solicitudes que afectan los ciclos de E/S y la CPU lo suficiente como para causar problemas de rendimiento. Pero permitir el almacenamiento en búfer en el registro te permite disminuir este tipo de impacto. Cuando el tamaño del búfer alcanza su límite, NGINX creará contenido de búfer para el registro.
Para habilitar el almacenamiento en búfer, agrega parámetros de búfer con valores de tamaño adecuados a la directiva de registro:
access_log /var/log/nginx/access.log main buffer=16k;
Alternativamente, si deseas deshabilitar el registro de acceso porque ya no lo necesitas, ingresa el siguiente comando:
access_log off;
Limitación de Valores de Tiempo de Espera
Limitar el valor de tiempo de espera puede mejorar el rendimiento: esperará la solicitud de encabezado y cuerpo del cliente durante el período especificado, y si los datos de respuesta no llegan dentro de ese intervalo, NGINX activará un tiempo de espera.
Puedes gestionar el valor de tiempo de espera con el siguiente comando: cópialo y pégalo en la sección http:
client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 13;
send_timeout 10;
El tiempo de espera del cuerpo y del encabezado del cliente se refiere al período que NGINX tiene para leer el encabezado y el cuerpo de una solicitud del cliente. La solicitud terminará cuando esto no se complete cuando termine el tiempo permitido.
Keepalive_timeout se refiere a la duración en la que la conexión keep-alive permanece abierta después de que NGINX cierra la conexión del cliente.
Finalmente, send_timeout se refiere a la duración en la que un cliente necesita recibir la respuesta de NGINX.
Apertura de Caché de Archivos
En Linux, prácticamente todo es un archivo, y cuando usas open_file, los descriptores de archivos y todos los archivos accedidos regularmente se almacenan en caché en el servidor. Servir archivos html estáticos con caché de archivos abiertos mejorará el rendimiento de NGINX, ya que abre y almacena caché en memoria durante un período específico de tiempo.
Para iniciar la caché, ingresa esto en el área http:
http {
...
open_file_cache max=1024 inactive=10s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
}
En resumen, esto concluye nuestra guía rápida para aumentar el rendimiento de NGINX. Esperamos que estas ocho técnicas te ayuden a sacar más provecho de este increíble servidor web.