tuning: módulo de aconselhamento de ajuste do NGINX
Requer o plano Pro (ou superior) da assinatura GetPageSpeed NGINX Extras.
Instalação
Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:
- RedHat Enterprise Linux 7, 8, 9 e 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 e 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
Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:
load_module modules/ngx_http_tuning_module.so;
Este documento descreve nginx-module-tuning v1.3.0 lançado em 29 de abril de 2026.
Recomendações de ajuste de proxy NGINX baseadas em dados de tráfego real
Pare de adivinhar os tamanhos dos seus buffers. Este módulo observa seus padrões de tráfego reais e diz exatamente o que configurar.
O Problema
Todo guia de configuração de proxy NGINX diz para ajustar proxy_buffer_size, proxy_buffers e timeouts. Mas quais valores você deve usar?
A abordagem tradicional envolve executar comandos curl contra seus backends:
curl -s -w %{size_header} -o /dev/null https://backend.example.com
Isso lhe dá um único ponto de dados. Seu tráfego real tem milhares de requisições por minuto, cada uma com tamanhos de cabeçalho, tamanhos de corpo e tempos de resposta diferentes. Um único curl não diz nada sobre o percentil 95 que está causando erros upstream sent too big header em produção.
A Solução
Este módulo fica dentro do NGINX, observa passivamente cada requisição proxy e constrói histogramas do tráfego real. Quando você estiver pronto, consulte o 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% dos cabeçalhos cabem em 4k"
},
"proxy_buffers": {
"observed": { "avg": "12.3k", "max": "2.1m", "p95_approx": "32.0k" },
"recommendation": "OK",
"suggested_value": "8 4k",
"reason": "Default 32k (8x4k) suficiente para 95% das respostas"
},
"ssl_buffer_size": {
"observed": { "avg": "12.3k", "max": "2.1m", "p95_approx": "32.0k" },
"recommendation": "OK",
"suggested_value": "16k",
"reason": "A maioria das respostas excede um registro TLS; dimensionamento dinâmico de registro ou ssl_buffer_size 4k não oferece benefício mensurável"
},
"nginx_config": {
"snippet": "proxy_buffer_size 4k;\nproxy_buffers 8 4k;\nproxy_read_timeout 10s;\nclient_body_buffer_size 8k;\nssl_buffer_size 16k;",
"apply_to": "bloco http, server ou location"
}
}
Copie o trecho, cole na sua configuração, recarregue. Pronto.
Recursos
Coleta de Métricas
- Tamanhos dos cabeçalhos de resposta upstream → ajuste
proxy_buffer_size - Tamanhos dos corpos de resposta upstream → ajuste
proxy_buffersessl_buffer_size - Tempos de resposta upstream → ajuste
proxy_read_timeout - Tamanhos dos corpos de requisição do cliente → ajuste
client_body_buffer_size - Taxas de reutilização de conexão → otimize as configurações de keepalive
- Taxas de acertos/perdas de cache → avalie a eficácia do cache proxy
Desempenho
- Atomics sem bloqueio — sem mutexes, sem contenção entre trabalhadores
- Memória compartilhada — todos os trabalhadores contribuem para os mesmos contadores
- Percentis baseados em histogramas — aproxima p95/p99 sem armazenar cada valor
- Sobrecarga em nanossegundos — ~10 incrementos atômicos por requisição
Formatos de Saída
- API JSON com recomendações, razões e trechos de configuração prontos para uso
- Métricas Prometheus para integração com Grafana, Alertmanager e amigos
- Endpoint de redefinição para limpar contadores e iniciar novas janelas de observação
Início Rápido
load_module modules/ngx_http_tuning_module.so;
http {
# Ative a coleta para todas as requisições proxy
tuning_advisor on;
server {
# Exponha o endpoint de ajuste (restrinja o acesso!)
location = /tuning-advisor {
tuning_advisor_status;
allow 127.0.0.1;
allow 10.0.0.0/8;
deny all;
}
location / {
proxy_pass http://backend;
}
}
}
Então consulte:
curl http://localhost/tuning-advisor | jq .
Referência de Configuração
tuning_advisor
tuning_advisor on | off;
| Padrão | off |
| Contexto | http, server, location |
Habilita a coleta de métricas para requisições proxy neste contexto.
tuning_advisor_shm_size
tuning_advisor_shm_size 1m;
| Padrão | 1m |
| Contexto | http |
Tamanho da zona de memória compartilhada para agregação de métricas entre trabalhadores. 1MB é suficiente para os contadores e histogramas de tamanho fixo.
tuning_advisor_status
tuning_advisor_status;
| Contexto | location |
Habilita o manipulador de status. Responde a GET (retorna métricas), POST (reinicia métricas) e GET com ?reset (também reinicia).
Referência da API
GET /tuning-advisor
Retorna JSON com métricas observadas, recomendações e um trecho de configuração pronto para uso.
Estrutura da resposta:
| Seção | Descrição |
|---|---|
sample_size |
Total de requisições proxy observadas |
uptime_seconds |
Segundos desde que a coleta começou (ou última redefinição) |
requests_per_second |
Taxa média de requisições |
proxy_buffer_size |
Métricas de tamanho de cabeçalho e recomendação |
proxy_buffers |
Métricas de tamanho de corpo e recomendação |
ssl_buffer_size |
Recomendação de tamanho de registro TLS derivada do corpo P95 |
proxy_read_timeout |
Métricas de tempo de resposta e recomendação |
client_body_buffer_size |
Métricas de corpo de requisição e recomendação |
connection_reuse |
Eficácia do keepalive do cliente e upstream |
proxy_cache |
Estatísticas de acertos/perdas/bypass de cache |
nginx_config |
Trecho de configuração para copiar e colar |
histograms |
Contagens brutas de buckets para análise personalizada |
GET /tuning-advisor?prometheus
Retorna no formato de exposição do Prometheus:
# HELP nginx_tuning_requests_total Total de requisições proxy observadas
# TYPE nginx_tuning_requests_total counter
nginx_tuning_requests_total 847293
# HELP nginx_tuning_header_size_bucket Distribuição do tamanho do cabeçalho
# 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
Configure a coleta do Prometheus:
scrape_configs:
- job_name: nginx-tuning
metrics_path: /tuning-advisor
params:
prometheus: ['1']
static_configs:
- targets: ['nginx:80']
POST /tuning-advisor
Reinicia todos os contadores para zero e retorna confirmação. Útil para iniciar uma nova janela de observação após alterações de configuração.
GET /tuning-advisor?reset
Mesma função que POST — reinicia todas as métricas.
Lógica de Recomendação
O módulo analisa percentis e fornece recomendações acionáveis:
| Métrica | Recomendação | Quando |
|---|---|---|
proxy_buffer_size |
OK |
p95 tamanho do cabeçalho ≤ 4KB |
INCREASE |
p95 > 4KB (sugere 8k, 16k ou 32k) | |
WARNING |
p95 > 16KB (investigue upstream) | |
proxy_buffers |
OK |
p95 tamanho do corpo ≤ 32KB |
INCREASE |
p95 > 32KB (sugere buffers maiores) | |
ssl_buffer_size |
REDUCE para 4k |
p95 corpo ≤ 4KB (tamanho de registro estático estilo Cloudflare) |
OK em 16k |
p95 corpo > 4KB (default é apropriado) | |
proxy_read_timeout |
CONSIDER_REDUCING |
p99 tempo de resposta < 5s |
OK |
p99 entre 5s e 30s | |
WARNING |
p99 > 30s (backend muito lento) | |
connection_reuse |
EXCELLENT |
Cliente ≥ 80% reutilização, upstream ≥ 70% |
WARNING |
Baixa reutilização (sugere ajuste de keepalive) | |
proxy_cache |
EXCELLENT |
Taxa de acertos ≥ 80% |
WARNING |
Taxa de acertos < 20% | |
| ## |
Histogramas
O módulo usa histogramas de buckets exponenciais para aproximar percentis sem armazenar cada valor:
Buckets de tamanho: <1k, 1-2k, 2-4k, 4-8k, 8-16k, 16-32k, 32-64k, >64k
Buckets de tempo: <10ms, 10-50ms, 50-100ms, 100-500ms, 500ms-1s, 1-5s, 5-10s, >10s
Contagens brutas de buckets estão disponíveis na seção histograms da resposta JSON para análise personalizada.
Considerações de Segurança
O endpoint /tuning-advisor revela informações sobre seus padrões de tráfego. Sempre restrinja o acesso:
location = /tuning-advisor {
tuning_advisor_status;
# Permitir apenas de localhost e rede 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;
# Ou exigir autenticação
# auth_basic "Tuning Advisor";
# auth_basic_user_file /etc/nginx/.htpasswd;
}
Leitura Relacionada
- Ajustando proxy_buffer_size no NGINX — análise aprofundada sobre dimensionamento de buffers
- Diretivas de Timeout do NGINX Explicadas — entendendo todos os ajustes de timeout