Cómo optimizar Nginx para alto tráfico
Guía completa de configuraciones avanzadas de Nginx para manejar miles de conexiones concurrentes sin comprometer el rendimiento.
Introducción
Nginx es uno de los servidores web más eficientes del mercado, pero su configuración por defecto no está optimizada para entornos de alto tráfico. En este artículo veremos las configuraciones clave que pueden multiplicar tu capacidad de manejo de conexiones concurrentes.
1. Worker Processes y Connections
La primera optimización es ajustar el número de procesos worker según tus núcleos de CPU:
# /etc/nginx/nginx.conf
worker_processes auto; # Detecta automáticamente los núcleos
worker_rlimit_nofile 65535; # Límite de archivos abiertos
events {
worker_connections 4096; # Conexiones por worker
use epoll; # Método eficiente en Linux
multi_accept on; # Acepta múltiples conexiones a la vez
} 2. Buffers y Timeouts
Ajustar los buffers reduce el uso de disco y mejora la velocidad de respuesta:
http {
# Buffers
client_body_buffer_size 128k;
client_max_body_size 10m;
client_header_buffer_size 1k;
large_client_header_buffers 4 16k;
output_buffers 1 32k;
postpone_output 1460;
# Timeouts
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
} 3. Compresión Gzip
La compresión reduce el ancho de banda hasta en un 70%:
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml text/javascript
application/json application/javascript application/xml+rss
application/rss+xml font/truetype font/opentype
application/vnd.ms-fontobject image/svg+xml;
gzip_disable "msie6"; 4. Caché de archivos estáticos
Configurar caché agresivo para assets estáticos:
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf)$ {
expires 1y;
add_header Cache-Control "public, immutable";
access_log off;
} 5. Open File Cache
Cachear descriptores de archivos reduce operaciones de I/O:
open_file_cache max=200000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on; 6. Límites del sistema operativo
No olvides ajustar los límites del kernel Linux:
# /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
# Aplicar cambios
sudo sysctl -p Conclusión
Con estas optimizaciones, un servidor Nginx puede manejar fácilmente más de 10,000 conexiones concurrentes. Recuerda siempre hacer pruebas de carga con herramientas como ab, wrk o siege para validar las mejoras.
💡 Tip profesional:
Monitorea siempre el uso de recursos con htop y netstat después de aplicar cambios. La optimización es un proceso iterativo.