ajuste: módulo asesor de ajuste de NGINX
Requiere el plan Pro (o superior) de la suscripción GetPageSpeed NGINX Extras.
Instalación
Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:
- RedHat Enterprise Linux 7, 8, 9 y 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 y Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-tuning
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-tuning
Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:
load_module modules/ngx_http_tuning_module.so;
Este documento describe nginx-module-tuning v1.2.0 lanzado el 16 de febrero de 2026.
Recomendaciones de ajuste de proxy NGINX basadas en datos de tráfico real
Deja de adivinar los tamaños de tus buffers. Este módulo observa tus patrones de tráfico reales y te dice exactamente qué configurar.
El Problema
Cada guía de configuración de proxy NGINX te dice que ajustes proxy_buffer_size, proxy_buffers y los tiempos de espera. Pero, ¿qué valores deberías usar?
El enfoque tradicional implica ejecutar comandos curl contra tus backends:
curl -s -w %{size_header} -o /dev/null https://backend.example.com
Esto te da un único punto de datos. Tu tráfico real tiene miles de solicitudes por minuto, cada una con diferentes tamaños de encabezados, tamaños de cuerpo y tiempos de respuesta. Un solo curl no te dice nada sobre el percentil 95 que está causando errores de upstream sent too big header en producción.
La Solución
Este módulo se encuentra dentro de NGINX, observa pasivamente cada solicitud proxy y construye histogramas del tráfico real. Cuando estés listo, consulta el endpoint /tuning-advisor:
{
"sample_size": 847293,
"uptime_seconds": 86400,
"requests_per_second": 9.81,
"proxy_buffer_size": {
"observed": { "avg": "1.8k", "max": "23.4k", "p95_approx": "4.0k" },
"recommendation": "OK",
"suggested_value": "4k",
"reason": "95% de los encabezados caben en 4k"
},
"proxy_buffers": {
"observed": { "avg": "12.3k", "max": "2.1m", "p95_approx": "32.0k" },
"recommendation": "OK",
"suggested_value": "8 4k",
"reason": "El valor predeterminado de 32k (8x4k) es suficiente para el 95% de las respuestas"
},
"nginx_config": {
"snippet": "proxy_buffer_size 4k;\nproxy_buffers 8 4k;\nproxy_read_timeout 10s;\nclient_body_buffer_size 8k;",
"apply_to": "bloque http, server o location"
}
}
Copia el fragmento, pégalo en tu configuración, recarga. Listo.
Características
Recolección de Métricas
- Tamaños de encabezados de respuesta del upstream → ajusta
proxy_buffer_size - Tamaños de cuerpo de respuesta del upstream → ajusta
proxy_buffers - Tiempos de respuesta del upstream → ajusta
proxy_read_timeout - Tamaños de cuerpo de solicitud del cliente → ajusta
client_body_buffer_size - Ratios de reutilización de conexiones → optimiza la configuración de keepalive
- Tasas de aciertos/fallos de caché → evalúa la efectividad del caché proxy
Rendimiento
- Atómicos sin bloqueo — sin mutexes, sin contención entre trabajadores
- Memoria compartida — todos los trabajadores contribuyen a los mismos contadores
- Percentiles basados en histogramas — aproxima p95/p99 sin almacenar cada valor
- Sobrecarga en nanosegundos — ~10 incrementos atómicos por solicitud
Formatos de Salida
- API JSON con recomendaciones, razones y fragmentos de configuración listos para usar
- Métricas de Prometheus para integración con Grafana, Alertmanager y amigos
- Endpoint de reinicio para limpiar contadores y comenzar nuevas ventanas de observación
Inicio Rápido
load_module modules/ngx_http_tuning_module.so;
http {
# Habilitar recolección para todas las solicitudes proxy
tuning_advisor on;
server {
# Exponer el endpoint de ajuste (¡restringir acceso!)
location = /tuning-advisor {
tuning_advisor_status;
allow 127.0.0.1;
allow 10.0.0.0/8;
deny all;
}
location / {
proxy_pass http://backend;
}
}
}
Luego, consúltalo:
curl http://localhost/tuning-advisor | jq .
Referencia de Configuración
tuning_advisor
tuning_advisor on | off;
| Predeterminado | off |
| Contexto | http, server, location |
Habilita la recolección de métricas para solicitudes proxy en este contexto.
tuning_advisor_shm_size
tuning_advisor_shm_size 1m;
| Predeterminado | 1m |
| Contexto | http |
Tamaño de la zona de memoria compartida para la agregación de métricas entre trabajadores. 1MB es más que suficiente para los contadores y histogramas de tamaño fijo.
tuning_advisor_status
tuning_advisor_status;
| Contexto | location |
Habilita el controlador de estado. Responde a GET (devuelve métricas), POST (reinicia métricas) y GET con ?reset (también reinicia).
Referencia de API
GET /tuning-advisor
Devuelve JSON con métricas observadas, recomendaciones y un fragmento de configuración listo para usar.
Estructura de respuesta:
| Sección | Descripción |
|---|---|
sample_size |
Total de solicitudes proxy observadas |
uptime_seconds |
Segundos desde que comenzó la recolección (o desde el último reinicio) |
requests_per_second |
Tasa promedio de solicitudes |
proxy_buffer_size |
Métricas de tamaño de encabezado y recomendación |
proxy_buffers |
Métricas de tamaño de cuerpo y recomendación |
proxy_read_timeout |
Métricas de tiempo de respuesta y recomendación |
client_body_buffer_size |
Métricas de cuerpo de solicitud y recomendación |
connection_reuse |
Efectividad de keepalive del cliente y upstream |
proxy_cache |
Estadísticas de aciertos/fallos/bypass de caché |
nginx_config |
Fragmento de configuración para copiar y pegar |
histograms |
Conteos brutos de cubos para análisis personalizado |
GET /tuning-advisor?prometheus
Devuelve el formato de exposición de Prometheus:
# HELP nginx_tuning_requests_total Total de solicitudes proxy observadas
# TYPE nginx_tuning_requests_total counter
nginx_tuning_requests_total 847293
# HELP nginx_tuning_header_size_bucket Distribución del tamaño de encabezados
# TYPE nginx_tuning_header_size_bucket histogram
nginx_tuning_header_size_bucket{le="1024"} 423841
nginx_tuning_header_size_bucket{le="2048"} 712453
nginx_tuning_header_size_bucket{le="4096"} 831029
nginx_tuning_header_size_bucket{le="+Inf"} 847293
Configura la recolección de Prometheus:
scrape_configs:
- job_name: nginx-tuning
metrics_path: /tuning-advisor
params:
prometheus: ['1']
static_configs:
- targets: ['nginx:80']
POST /tuning-advisor
Reinicia todos los contadores a cero y devuelve una confirmación. Útil para comenzar una nueva ventana de observación después de cambios de configuración.
GET /tuning-advisor?reset
Igual que POST — reinicia todas las métricas.
Lógica de Recomendación
El módulo analiza percentiles y proporciona recomendaciones accionables:
| Métrica | Recomendación | Cuándo |
|---|---|---|
proxy_buffer_size |
OK |
tamaño de encabezado p95 ≤ 4KB |
INCREASE |
p95 > 4KB (sugiere 8k, 16k o 32k) | |
WARNING |
p95 > 16KB (investigar upstream) | |
proxy_buffers |
OK |
tamaño de cuerpo p95 ≤ 32KB |
INCREASE |
p95 > 32KB (sugiere buffers más grandes) | |
proxy_read_timeout |
CONSIDER_REDUCING |
tiempo de respuesta p99 < 5s |
OK |
p99 entre 5s y 30s | |
WARNING |
p99 > 30s (backend demasiado lento) | |
connection_reuse |
EXCELLENT |
Cliente ≥ 80% reutilización, upstream ≥ 70% |
WARNING |
Baja reutilización (sugiere ajuste de keepalive) | |
proxy_cache |
EXCELLENT |
Tasa de aciertos ≥ 80% |
WARNING |
Tasa de aciertos < 20% |
Histogramas
El módulo utiliza histogramas de cubos exponenciales para aproximar percentiles sin almacenar cada valor:
Cubos de tamaño: <1k, 1-2k, 2-4k, 4-8k, 8-16k, 16-32k, 32-64k, >64k
Cubos de tiempo: <10ms, 10-50ms, 50-100ms, 100-500ms, 500ms-1s, 1-5s, 5-10s, >10s
Los conteos brutos de cubos están disponibles en la sección histograms de la respuesta JSON para análisis personalizado.
Consideraciones de Seguridad
El endpoint /tuning-advisor revela información sobre tus patrones de tráfico. Siempre restringe el acceso:
location = /tuning-advisor {
tuning_advisor_status;
# Permitir solo desde localhost y red interna
allow 127.0.0.1;
allow ::1;
allow 10.0.0.0/8;
allow 172.16.0.0/12;
allow 192.168.0.0/16;
deny all;
# O requerir autenticación
# auth_basic "Tuning Advisor";
# auth_basic_user_file /etc/nginx/.htpasswd;
}
Lectura Relacionada
- Ajuste de proxy_buffer_size en NGINX — análisis profundo sobre el tamaño de los buffers
- Directivas de Tiempo de Espera de NGINX Explicadas — entendiendo todos los parámetros de tiempo de espera