Nginx Guide

Guia Completo de Nginx

Aprenda tudo sobre Nginx, desde a instalação básica até configurações avançadas para ambientes de produção.

Arquitetura Nginx
Master Process
Worker Processes
Event-Driven
Non-Blocking I/O
Reverse Proxy

Por Que Usar Nginx?

Nginx segue como proxy reverso, terminação TLS e servidor de arquivo estático na frente da aplicação.

Proxy

na frente da aplicação

TLS 1.3

e HTTP/2 no dia a dia

HTTP/3

QUIC no Nginx estável

High

desempenho

Conceitos Fundamentais do Nginx

Entenda os componentes essenciais e a arquitetura do Nginx

Arquitetura Assíncrona

Baseado em eventos e não em threads, permitindo lidar com milhares de conexões simultâneas com baixo consumo de memória.

Proxy Reverso

Atua como intermediário entre clientes e servidores de aplicação, melhorando segurança, desempenho e escalabilidade.

Balanceamento de Carga

Distribui requisições entre múltiplos servidores para melhorar disponibilidade e performance.

Cache e Compressão

Armazena conteúdo estático em cache e comprime respostas para reduzir latência e uso de banda.

Segurança

Oferece proteção contra ataques DDoS, limitação de taxa e configurações de segurança avançadas.

Configuração Modular

Sistema de configuração baseado em arquivos com blocos aninhados e herança de diretivas.

Primeiros Passos com Nginx

Instalação e configuração básica para começar

Instalação do Nginx

Nginx está disponível para Linux, Windows e macOS. A instalação varia conforme o sistema operacional.

# Ubuntu/Debian
sudo apt update
sudo apt install nginx
sudo systemctl start nginx
sudo systemctl enable nginx

# CentOS/RHEL
sudo yum install epel-release
sudo yum install nginx
sudo systemctl start nginx
sudo systemctl enable nginx

# Verificar instalação
sudo nginx -v
systemctl status nginx

Estrutura de Diretórios

  • /etc/nginx/ - Arquivos de configuração
  • /var/www/html/ - Documentos web
  • /var/log/nginx/ - Logs de acesso e erro
  • /usr/share/nginx/ - Arquivos compartilhados
  • /etc/nginx/sites-available/ - Configurações de sites
  • /etc/nginx/sites-enabled/ - Sites habilitados

Configuração Básica do Nginx

Entenda a estrutura do arquivo de configuração principal

# /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    
    # Logging
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    
    # Gzip Settings
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_types text/plain text/css application/json application/javascript;
    
    # Virtual Host Configs
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}
Diretivas Principais

user, worker_processes, pid

Bloco Events

worker_connections

Bloco HTTP

Configurações gerais e servidores

Hosts Virtuais (Server Blocks)

Configure múltiplos sites no mesmo servidor Nginx

Exemplo de Host Virtual

Crie um arquivo de configuração para cada site em /etc/nginx/sites-available/

# /etc/nginx/sites-available/meusite.com
server {
    listen 80;
    server_name meusite.com www.meusite.com;
    root /var/www/meusite.com;
    index index.html index.php;
    
    location / {
        try_files $uri $uri/ =404;
    }
    
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }
    
    location ~ /\.ht {
        deny all;
    }
}

Comandos Úteis

  • sudo ln -s /etc/nginx/sites-available/meusite.com /etc/nginx/sites-enabled/
  • sudo nginx -t - Testar configuração
  • sudo systemctl reload nginx - Recarregar configuração
  • sudo nginx -s reload - Recarregar sem reiniciar
  • sudo nginx -T - Mostrar configuração completa

Proxy Reverso com Nginx

Configure Nginx como proxy reverso para aplicações backend

# Proxy reverso para aplicação Node.js
server {
    listen 80;
    server_name app.meusite.com;
    
    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        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_cache_bypass $http_upgrade;
    }
    
    # Cache para conteúdo estático
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}
Dica Importante

Sempre configure os headers X-Forwarded-* corretamente para que sua aplicação backend receba as informações originais do cliente.

Balanceamento de Carga

Distribua tráfego entre múltiplos servidores para alta disponibilidade

# Configuração de balanceamento de carga
upstream backend {
    # Métodos de balanceamento:
    # least_conn;     # Menos conexões
    # ip_hash;        # Hash do IP do cliente
    # hash $request_uri; # Hash da URI
    
    server backend1.example.com weight=3;
    server backend2.example.com;
    server backend3.example.com backup;
    server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
}

server {
    listen 80;
    server_name loadbalancer.example.com;
    
    location / {
        proxy_pass http://backend;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
    }
    
    # Health check
    location /health {
        access_log off;
        return 200 "healthy\n";
        add_header Content-Type text/plain;
    }
}

Segurança em Nginx

Práticas essenciais para proteger seu servidor Nginx

HTTPS/SSL

Configure certificados SSL/TLS usando Let's Encrypt para criptografar tráfego.

Proteção DDoS

Limite conexões por IP e configure timeouts adequados.

Restrição de Acesso

Restrinja acesso a diretórios sensíveis e IPs específicos.

Headers de Segurança

Adicione headers como X-Frame-Options, X-Content-Type-Options e Content-Security-Policy.

# Configuração de segurança recomendada
server {
    listen 443 ssl http2;
    server_name secure.example.com;
    
    # SSL Configuration
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
    
    # Security Headers
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "no-referrer-when-downgrade" always;
    add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
    
    # Rate Limiting
    limit_req_zone $binary_remote_addr zone=login:10m rate=1r/s;
    location /login {
        limit_req zone=login burst=5 nodelay;
    }
    
    # Hide Nginx version
    server_tokens off;
}

Otimização de Performance

Técnicas para maximizar o desempenho do seu servidor Nginx

Otimizações de Configuração

1. Ajuste worker_processes

Defina como auto para usar todos os núcleos da CPU.

2. Otimização de conexões

Aumente worker_connections e ajuste keepalive_timeout.

3. Cache eficiente

Configure cache para conteúdo estático e proxy_cache para conteúdo dinâmico.

4. Compressão Gzip

Habilite gzip para reduzir o tamanho das respostas.

5. Buffer tuning

Ajuste buffers para melhorar o manuseio de requisições grandes.

Métricas Importantes

  • Tempo de resposta
  • Taxa de erro
  • Conexões simultâneas
  • Uso de memória

Ferramentas de Monitoramento

  • Nginx Amplify
  • Prometheus + Grafana
  • New Relic
  • Datadog
Dica de Performance

Use o módulo ngx_http_stub_status_module para monitorar métricas em tempo real do Nginx.

Nginx em Produção

Estratégias e melhores práticas para ambientes de produção

1

Ambiente Seguro

Execute Nginx como usuário não-root e restrinja permissões de arquivos.

# /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
worker_rlimit_nofile 65535;
2

Logs Estruturados

Configure logs em formato JSON para melhor análise e monitoramento.

log_format json_combined escape=json
  '{'
    '"time_local":"$time_local",'
    '"remote_addr":"$remote_addr",'
    '"request":"$request",'
    '"status":$status,'
    '"body_bytes_sent":$body_bytes_sent,'
    '"http_user_agent":"$http_user_agent"'
  '}';

access_log /var/log/nginx/access.log json_combined;
3

Atualizações Contínuas

Mantenha o Nginx atualizado e use reload em vez de restart para zero downtime.

# Atualização segura
sudo nginx -t && sudo systemctl reload nginx
4

Backup de Configuração

Versione suas configurações e mantenha backups regulares.

# Backup automático
rsync -av /etc/nginx/ /backup/nginx-$(date +%Y%m%d)/

Tópicos Avançados

Explore funcionalidades avançadas do Nginx

Módulos Dinâmicos

Carregue módulos dinamicamente sem recompilar o Nginx.

Streaming de Mídia

Configure streaming HLS e RTMP para vídeo ao vivo.

Nginx Unit

Plataforma de aplicação dinâmica para executar aplicações em várias linguagens.

Nginx Controller

Plataforma de gerenciamento empresarial para Nginx em larga escala.

Cenário em setembro de 2026

O uso típico continua sendo um server que termina TLS e faz proxy_pass para a aplicação ou para o upstream do Compose. TLS 1.2 no mínimo, com 1.3 preferido. HTTP/2 no mesmo listener.

HTTP/3 (QUIC) está no Nginx estável, no módulo ngx_http_v3_module, para quem precisa do protocolo. Não é obrigatório para um proxy comum. Certificado ainda vem do mesmo fluxo de sempre (Let's Encrypt ou o da sua CA).