Cómo optimizar la configuración de Nginx

Introducción

Nginx

Índice
  1. Introducción
    1. Nginx
    2. Requisitos
  2. Procesos de trabajo y conexiones entre trabajadores
  3. Buffers
  4. Tiempos de espera
  5. Compresión Gzip
  6. Almacenamiento en caché de archivos estáticos
  7. Explotación florestal
    1. Conclusión

Nginx es una alternativa rápida y liviana al a veces autoritario Apache 2. Sin embargo, Nginx, como cualquier tipo de servidor o software, debe ajustarse para ayudar a lograr un rendimiento óptimo.

Requisitos

  • Una nueva gota de Debian 7 con la configuración inicial completada.

  • El droplet también debe tener un servidor Nginx recién instalado y configurado en ejecución. Pruebe el tutorial de pila LEMP de Debian o, si desea algo un poco más básico, pruebe el tutorial de bloques de servidor Nginx de Debian.

  • Una buena comprensión de los conceptos básicos de Linux.

Procesos de trabajo y conexiones entre trabajadores

Las dos primeras variables que debemos ajustar son los procesos de trabajo y las conexiones de los trabajadores. Antes de analizar cada configuración, debemos comprender qué controla cada una de estas directivas. La directiva worker_processes es la columna vertebral de Nginx. Esta directiva es responsable de informar a nuestro servidor virtual cuántos trabajadores generar una vez que se haya vinculado a la dirección IP y los puertos adecuados. Es una práctica común ejecutar un proceso de trabajo por núcleo. Cualquier valor superior a este no dañará su sistema, pero dejará procesos inactivos que, por lo general, simplemente permanecerán inactivos.

Para averiguar qué número necesitarás para configurar worker_processes , simplemente echa un vistazo a la cantidad de núcleos que tienes en tu configuración. Si estás usando la configuración de 512 MB de DigitalOcean, entonces probablemente será un núcleo. Si terminas redimensionando rápidamente a una configuración más grande, entonces necesitarás verificar tus núcleos nuevamente y ajustar este número en consecuencia. Podemos lograr esto extrayendo la información de la CPU:

grep processor /proc/cpuinfo | wc -l

Digamos que esto devuelve un valor de 1. ¡Entonces esa es la cantidad de núcleos en nuestra máquina!

El worker_connectionscomando le dice a nuestros procesos de trabajo cuántas personas pueden ser atendidas simultáneamente por Nginx. El valor predeterminado es 768; sin embargo, considerando que cada navegador generalmente abre al menos 2 conexiones por servidor, este número puede reducirse a la mitad. Es por eso que necesitamos ajustar nuestras conexiones de trabajo a su máximo potencial. Podemos verificar las limitaciones de nuestro núcleo emitiendo un comando ulimit:

ulimit -n

En una máquina más pequeña (droplet de 512 MB), este número probablemente será 1024, que es un buen número inicial.

Actualicemos nuestra configuración:

sudo nano /etc/nginx/nginx.conf

worker_processes 1;worker_connections 1024;

Recuerde que la cantidad de clientes que se pueden atender se puede multiplicar por la cantidad de núcleos. En este caso, podemos atender 1024 clientes por segundo. Sin embargo, la keepalive_timeoutdirectiva mitiga aún más este problema.

Buffers

Otro ajuste increíblemente importante que podemos hacer es 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 el disco lea y escriba constantemente. Hay algunas directivas que debemos entender antes de tomar cualquier decisión.

client_body_buffer_size:Esto maneja el tamaño del búfer del cliente, es decir, cualquier acción POST enviada a Nginx. Las acciones POST son típicamente envíos de formularios.

client_header_buffer_size:Similar a la directiva anterior, solo que en su lugar se maneja el tamaño del encabezado del cliente. A todos los efectos, 1K suele ser un tamaño adecuado para esta directiva.

client_max_body_size: El tamaño máximo permitido para una solicitud de cliente. Si se supera el tamaño máximo, Nginx mostrará un error 413 o Entidad de solicitud demasiado grande.

large_client_header_buffers:El número máximo y el tamaño de los buffers para encabezados de cliente grandes.

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.

Las directivas client_body_timeoutand client_header_timeoutson responsables del tiempo que un servidor esperará para que se envíe el cuerpo o el encabezado de un cliente después de la solicitud. Si no se envía ni el cuerpo ni el encabezado, el servidor emitirá un error 408 o se agotará el tiempo de solicitud.

Asigna keepalive_timeoutel tiempo de espera para las conexiones activas con el cliente. En pocas palabras, Nginx cerrará las conexiones con el cliente después de este período de tiempo.

Finalmente, send_timeoutno se establece durante toda la transferencia de respuesta, sino solo entre dos operaciones de lectura; si después de este tiempo el cliente no toma nada, entonces Nginx cierra la conexión.

client_body_timeout 12;client_header_timeout 12;keepalive_timeout 15;send_timeout 10;

Compresión Gzip

Gzip puede ayudar a reducir la cantidad de transferencia de red que maneja Nginx. Sin embargo, tenga cuidado al aumentar gzip_comp_leveldemasiado el valor, ya que el servidor comenzará a desperdiciar ciclos de 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;

Almacenamiento en caché de archivos estáticos

Es posible establecer encabezados de vencimiento para archivos que no cambian y se envían con regularidad. Esta directiva se puede agregar al bloque del servidor Nginx actual.

location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {expires 365d;}

Agregue y elimine cualquiera de los tipos de archivos en la matriz anterior para que coincidan con los tipos de archivos de sus servidores Nginx.

Explotación florestal

Nginx registra cada solicitud que llega al VPS en un archivo de registro. Si utiliza Analytics para supervisar esto, es posible que desee desactivar esta función. Simplemente edite la access_logdirectiva:

access_log off;

Guarde y cierre el archivo, luego ejecute:

sudo service nginx restart

Conclusión

Al fin y al cabo, un servidor configurado correctamente es aquel que se supervisa y se ajusta en consecuencia. Ninguna de las variables anteriores es inamovible y será necesario ajustarla a cada caso particular. Incluso más adelante, es posible que desee mejorar el rendimiento de su equipo investigando sobre equilibrio de carga y escalado horizontal. Estas son solo algunas de las muchas mejoras que un buen administrador de sistemas puede realizar en un servidor.

div class=“author”Enviado por: a href=“https://twitter.com/alexkavon”Alex Kavon/div

SUSCRÍBETE A NUESTRO BOLETÍN 
No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion