NGINX es un servidor web de alto rendimiento utilizado especialmente para gestionar archivos estáticos y como proxy inverso, pero que, gracias a su versatilidad, puede ser explotado en cualquier tipo de situación.
En esta guía, aprenderá cómo filtrar y optimizar las solicitudes de archivos estáticos con NGINX para aumentar el rendimiento de su sitio web y reducir la carga del servidor, usando algunos trucos, como habilitar la compresión Gzip, cambiar el número de procesos/conexiones o el tamaño de los búferes.
Primero, conéctese a su servidor a través de una conexión SSH. Si aún no lo ha hecho, se recomienda seguir nuestra guía para conectarse de forma segura con SSH. En caso de un servidor local, vaya al siguiente paso y abra la terminal de su servidor.
Modificación de los Parámetros de Configuración
Abra el archivo de configuración de NGINX usando un editor, como nano o vi. Para este ejemplo, se utilizó nano.
$ sudo nano /etc/nginx/nginx.conf
Habilitación de la compresión Gzip
Al habilitar la compresión Gzip, se puede reducir la cantidad de datos que se transmiten. Tenga cuidado de no aumentar demasiado el nivel de compresión de Gzip, ya que puede afectar el rendimiento de la CPU.
gzip on;
gzip_comp_level 2;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/x-javascript text/xml text/css application/xml;
Configuración del número de procesos y conexiones
El parámetro 'worker_processes' se refiere a la cantidad de procesos instanciados por NGINX después de iniciarlo. La cantidad de procesos normalmente debe ser igual a la cantidad de núcleos en el servidor. Por ejemplo, si el servidor tiene un procesador con 4 núcleos, se debe configurar el parámetro con el valor 4, de la siguiente manera:
worker_processes 4;
El parámetro worker_connections se refiere a la cantidad de clientes que serán atendidos por un solo proceso. Para establecer un valor óptimo para la configuración, todo lo que tiene que hacer es verificar los límites de sus núcleos con el comando:
$ ulimit -n
El resultado será el número máximo de conexiones por proceso. Luego, para configurarlo:
worker_processes 1024;
Cambiar el tamaño de los búferes
Si el tamaño de los búferes es demasiado bajo, NGINX se verá obligado a crear archivos temporales, lo que provocará numerosas operaciones de disco. Para evitarlo, establezca correctamente el tamaño de los búferes.
client_max_body_size:indica el tamaño máximo de la solicitud del cliente
client_body_buffer_size:se refiere al tamaño del búfer para solicitudes POST
client_header_buffer_size:se refiere al tamaño del búfer relativo al encabezado de solicitud del cliente
Al modificar estos parámetros con los siguientes valores, se debe obtener un buen resultado:
client_max_body_size 8m;
client_body_buffer_size 10K;
client_header_buffer_size 1k;
Cambiar la duración del caché
Para administrar la duración del caché de archivos estáticos, todo lo que tiene que hacer es especificar las extensiones de archivo y su duración de esta manera:
location ~*.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}
donde con 365d se especifica que el caché para sus extensiones durará 365 días.
Reducción de tiempos de espera
Los parámetros client_body_timeout y client_header_timeout respectivamente indican el tiempo de espera para el cuerpo o encabezado de la solicitud. Si el servidor no recibe el cuerpo o el encabezado dentro de este tiempo, \ la conexión finaliza con un error de tiempo de espera.
El parámetro send_timeout indica el tiempo máximo entre dos operaciones de lectura. si se supera este tiempo, NGINX finalizará la conexión con el cliente.
En cambio, el parámetro keepalive_timeout se refiere a la duración máxima de una conexión Keep-Alive antes de terminarla.
Al configurar estos valores de la siguiente manera, se debe obtener un buen resultado:
client_body_timeout 12;
client_header_timeout 12;
send_timeout 10;
keepalive_timeout 15;
Inhabilitación de registros
NGINX supervisa cada solicitud realizada en un archivo de registro. Para deshabilitar esta función, todo lo que tiene que hacer es cambiar el parámetro access_log de la siguiente manera:
access_log off;
Aplicando cambios
Reinicie el servicio NGINX para implementar los cambios:
$ sudo service nginx restart