Prerrequisitos
Siga esta guía para instalar Nginx - MySQL - PHP: Cómo instalar LEMP Nginx MySQL PHP en Ubuntu 16.04-17.10
Procesos de trabajo y conexiones de trabajadores
Las dos primeras variables a optimizar son los procesos de trabajo y las conexiones de trabajo. Lo primero que debe hacer es averiguar qué cantidad de núcleos tiene disponibles en su servidor. De forma predeterminada, worker_processes se establece en auto.
Desde la terminal da este comando:
grep processor /proc/cpuinfo | wc -l
Si el resultado es, por ejemplo, "1", este es el número de núcleos que tiene disponibles en su servidor.
El comando worker_connections nos dice cuántas personas pueden ser atendidas simultáneamente por Nginx. El valor predeterminado es 768. Podemos comprobar los límites de nuestro núcleo con este comando:
ulimit -n
Un ejemplo de resultado sería "1024".
Abramos el archivo de configuración de Nginx. Desde la consola:
sudo nano /etc/nginx/nginx.conf
Busquemos las siguientes líneas y actualicémoslas con los valores obtenidos de los comandos anteriores:
worker_processes 1;
worker_connections 1024;
Buffer
Otra configuración importante que podemos hacer es sobre el tamaño del búfer. Si el tamaño del búfer es demasiado pequeño, Nginx tendrá que escribir en un archivo temporal, lo que hará que lea y escriba continuamente en el disco. Estas son las variables que modificaremos:
client_body_buffer_size: administra el tamaño del búfer del cliente, es decir, todas las acciones POST enviadas a Nginx.
client_header_buffer_size: administra el tamaño del encabezado del cliente.
client_max_body_size: el tamaño máximo permitido para una solicitud de cliente. Si se excede el tamaño máximo, Nginx devolverá un error "413" o "Solicitar entidad demasiado grande".
large_client_header_buffers: el número máximo y el tamaño de búferes para encabezados de cliente grandes.
Entonces, siempre en el mismo archivo antiguo nginx.conf
Agregue o modifique los siguientes parámetros:
client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 2 1k;
Tiempos de espera
Los tiempos de espera también pueden mejorar drásticamente el rendimiento.
client_body_timeout y client_header_timeout son responsables de cuánto tiempo esperará un servidor a que se envíe un cuerpo de cliente o un encabezado de cliente después de la solicitud. Si no se envía ni un cuerpo ni un encabezado, el servidor emitirá un error "408" o "Solicitar tiempo de espera".
Keepalive_timeout Nginx cerrará las conexiones con el cliente después de este período de tiempo.
send_timeout se refiere al tiempo de respuesta entre dos operaciones de lectura; si pasado este tiempo el cliente no acepta nada, Nginx cerrará la conexión.
Luego, en el mismo archivo anterior nginx.conf
Agregue o modifique los siguientes parámetros:
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
Compresión con Gzip
Gzip ayuda a reducir el tráfico de la red Nginx.
Siempre en el mismo archivo nginx.conf
Agregue o modifique los siguientes parámetros:
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;
Inicio sesión
Nginx registra cada tipo de solicitud al servidor en un archivo de registro, puede deshabilitarlo.
En el mismo archivo nginx.conf
Agregue o modifique los siguientes parámetros:
access_log off;
Guarde y cierre el archivo.
Para comprobar si las configuraciones se realizaron correctamente, desde la consola:
sudo nginx -t
Almacenamiento en caché de archivos estáticos
Puede establecer la caducidad de la caché para ciertos tipos de archivos.
Abra y edite el siguiente archivo:
sudo nano /etc/nginx/sites-available/default
Agregue las siguientes líneas de código dentro del bloque del servidor {...}:
server{...
location ~*.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}...
}
Guarde y cierre el archivo.
Para comprobar si las configuraciones se realizaron correctamente, desde la consola:
sudo nginx -t
Si no hay errores, reinicie nginx:
sudo service nginx restart
La optimización de Nginx ha finalizado.