Os padrões de reverse proxy do Nginx que de fato rodamos em produção
18 de maio de 2026 · 1 min de leitura · por Sudhanshu K.
A maioria das configs de reverse proxy do Nginx em produção é um copy-paste do blog de alguém em 2017. Funciona, mais ou menos. O keep-alive para o backend está desligado, então cada requisição abre uma nova conexão. A cadeia X-Forwarded-For está errada, então a aplicação loga o IP cliente errado. proxy_buffering está ligado por padrão, o que adiciona latência em respostas streamadas. Nenhuma é uma falha dramática — são impostos lentos e constantes que você só nota quando senta para ler o que implantou.
Esta é a config de reverse proxy que copiamos no edge de cada cliente.
O bloco upstream minimamente viável
upstream app {
server 10.0.1.10:8080 max_fails=3 fail_timeout=15s;
server 10.0.1.11:8080 max_fails=3 fail_timeout=15s;
keepalive 32;
keepalive_requests 1000;
keepalive_timeout 60s;
}
location / {
proxy_pass http://app;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 60s;
}O keepalive 32 + Connection "" é inegociável. Sem isso, você refaz o handshake TCP para o backend a cada requisição — e para tráfego interno de alto RPS isso dobra a latência sem motivo.
O artigo completo cobre:
- A cadeia X-Forwarded-For — e o bloco
real_ip_headerque faz a app ver o IP correto proxy_bufferingvs respostas streamadas (Server-Sent Events, downloads grandes)- Health checks: passivos (
max_fails/fail_timeout) vs ativos (Nginx Plus comercial oungx_http_upstream_check_module) proxy_next_upstream— quando retries ajudam e quando causam writes duplicados- Limites de tamanho de body (
client_max_body_size) e onde mordem uploads - O padrão TLS-to-backend quando você de fato quer
Entregamos essa config em cada instalação Nginx gerenciada.
Full article available
Read the full article