Person Holding a Sticker with Green Letters

Optimización del Servicio Nginx  para diferentes escenarios de servidores dedicados

Nginx es un servidor web poderoso que, cuando se configura adecuadamente, puede manejar una gran cantidad de tráfico con una eficiencia impresionante. Este artículo proporciona una guía completa sobre cómo optimizar Nginx ajustando sus parámetros clave, enfocándose en configuraciones para tres escenarios de servidor distintos: 1 CPU y 1 GB de RAM, 2 CPUs y 2 GB de RAM, y 4 CPUs y 4 GB de RAM. Cada configuración está diseñada para maximizar el rendimiento y la estabilidad en función de los recursos disponibles.

Parámetros y Variables Clave en la Configuración de Nginx

Antes de sumergirnos en las configuraciones específicas, es importante comprender los principales parámetros y archivos que controlan el comportamiento de Nginx:

Archivo principal de configuración de Nginx:

Ruta: /etc/nginx/nginx.conf
Este archivo controla la configuración global de Nginx, incluyendo la gestión de procesos, tiempo de espera, y opciones de rendimiento.

Archivos de configuración de sitios (servidores virtuales):

Ruta: /etc/nginx/sites-available/ y /etc/nginx/sites-enabled/
Aquí se especifican configuraciones específicas para cada sitio o servidor virtual que se aloja en Nginx.

Parámetros Clave a Configurar:

worker_processes

Controla cuántos procesos de trabajo Nginx utilizará. El valor auto permite a Nginx detectar automáticamente el número de núcleos de CPU disponibles y asignar procesos en consecuencia.

worker_connections

Define el número máximo de conexiones simultáneas que cada proceso de trabajo puede manejar.

ssl_protocols

Define los protocolos SSL/TLS que Nginx usará para conexiones seguras. Se recomienda deshabilitar versiones obsoletas y vulnerables como SSLv3 y TLSv1.0 y TLSv1.1, utilizando solo TLSv1.2 y TLSv1.3 para mejorar la seguridad.

client_body_timeout, client_header_timeout, send_timeout

Ajustan los tiempos de espera para diferentes fases de la comunicación con el cliente. Estos ajustes aseguran que los clientes lentos no consuman demasiados recursos.

keepalive_timeout

Ajustado para mantener conexiones abiertas durante un tiempo razonable sin consumir demasiados recursos.

client_body_buffer_size, client_header_buffer_size, large_client_header_buffers

Ajustan los tamaños de los búferes para manejar mejor los datos de solicitud del cliente, optimizando el rendimiento en el manejo de solicitudes más complejas.

client_max_body_size

Limita el tamaño máximo del cuerpo de la solicitud que Nginx aceptará, lo que ayuda a prevenir abusos en el uso de recursos.

Configuración para Diferentes Escenarios de Servidor

1. Servidor con 1 CPU y 1 GB de RAM

Objetivo: Optimizar el uso de recursos limitados, ideal para sitios web pequeños o aplicaciones ligeras.

worker_processes auto;

events {
    worker_connections 1024;
    use epoll;
    multi_accept on;
}

http {
    keepalive_timeout 15s;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    client_max_body_size 8M;

    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 2;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    fastcgi_cache_path /var/cache/nginx/fastcgi_temp levels=1:2 keys_zone=fastcgicache:10m max_size=128m;
    fastcgi_buffers 4 8k;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    server {
        listen 80;
        server_name ejemplo.com;
        root /var/www/html;
        index index.html;
    }
}

2. Servidor con 2 CPUs y 2 GB de RAM

Objetivo: Mejorar la capacidad para manejar tráfico moderado y optimizar el rendimiento general.

worker_processes auto;

events {
    worker_connections 2048;
    use epoll;
    multi_accept on;
}

http {
    keepalive_timeout 30s;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    client_max_body_size 16M;

    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 3;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    fastcgi_cache_path /var/cache/nginx/fastcgi_temp levels=1:2 keys_zone=fastcgicache:20m max_size=256m;
    fastcgi_buffers 8 16k;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    server {
        listen 80;
        server_name ejemplo.com;
        root /var/www/html;
        index index.html;
    }
}

3. Servidor con 4 CPUs y 4 GB de RAM

Objetivo: Optimizar al máximo el rendimiento para manejar tráfico intensivo y asegurar la estabilidad del servidor.

worker_processes auto;

events {
    worker_connections 4096;
    use epoll;
    multi_accept on;
}

http {
    client_body_timeout 30s;
    client_header_timeout 30s;
    keepalive_timeout 65s;
    send_timeout 30s;

    client_body_buffer_size 16k;
    client_header_buffer_size 4k;
    client_max_body_size 32M;
    large_client_header_buffers 4 8k;

    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 4;
    gzip_buffers 32 16k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    fastcgi_cache_path /var/cache/nginx/fastcgi_temp levels=1:2 keys_zone=fastcgicache:40m max_size=512m;
    fastcgi_buffers 16 32k;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    server {
        listen 80;
        server_name ejemplo.com;
        root /var/www/html;
        index index.html;
    }
}

En Keliam, estamos comprometidos con ayudarte a optimizar tu infraestructura de servidores. Si necesitas asistencia para implementar estas configuraciones o para desarrollar una estrategia de optimización personalizada, no dudes en contactarnos. ¡Estamos aquí para asegurar que tu servidor Nginx funcione de la mejor manera posible!

Si quieres ver como configurar tu PHP-FPM 8 para tu web o ecommerce visita nuestra otra entrada.