Nginx - Configuração e Comandos - Manual Técnico

Nginx - Configuração e Comandos

📚 Sobre este manual: Comandos e configurações essenciais do Nginx para gerenciar seus sites no servidor.

🔧 Comandos Básicos do Nginx

# Testar configuração (sempre faça antes de recarregar!)
sudo nginx -t

# Recarregar configurações (sem downtime)
sudo systemctl reload nginx

# Reiniciar Nginx (com downtime)
sudo systemctl restart nginx

# Ver status
sudo systemctl status nginx

# Ver versão
nginx -v
💡 Dica: Sempre use nginx -t antes de recarregar. Se der erro, corrija antes de prosseguir.

⚙️ Configuração Padrão de um Site

Arquivo: /etc/nginx/sites-available/nome-do-site

server {
    listen 80;
    listen [::]:80;
    server_name seudominio.com.br www.seudominio.com.br;

    location / {
        include proxy_params;
        proxy_pass http://unix:/var/www/nome-do-site/nome-do-site.sock;
        
        # Buffers para respostas grandes
        proxy_buffer_size 128k;
        proxy_buffers 4 256k;
        proxy_busy_buffers_size 256k;
        
        # Timeouts para operações demoradas
        proxy_connect_timeout 150s;
        proxy_send_timeout 150s;
        proxy_read_timeout 300s;
        send_timeout 300s;
    }

    location /static {
        alias /var/www/nome-do-site/static;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    location /media {
        alias /var/www/nome-do-site/media;
        expires 30d;
    }
}
📌 Explicação:
  • server_name - Domínio que o site responde
  • proxy_read_timeout 300s - Aguarda 5 minutos por resposta (essencial para queries SQL lentas)
  • expires 30d - Arquivos estáticos em cache por 30 dias
  • _ - Usar server_name _; para aceitar qualquer domínio/IP (testes)

📝 Criar um Novo Site

# 1. Criar arquivo de configuração
sudo nano /etc/nginx/sites-available/nome-do-site

# 2. Colar a configuração padrão (substitua os placeholders)

# 3. Ativar o site
sudo ln -s /etc/nginx/sites-available/nome-do-site /etc/nginx/sites-enabled/

# 4. Testar e recarregar
sudo nginx -t
sudo systemctl reload nginx

✅ Ativar / Desativar Sites

# Ativar um site
sudo ln -s /etc/nginx/sites-available/nome-do-site /etc/nginx/sites-enabled/

# Desativar um site
sudo unlink /etc/nginx/sites-enabled/nome-do-site

# Ver sites ativos
ls -la /etc/nginx/sites-enabled/

# Ver todos sites disponíveis
ls -la /etc/nginx/sites-available/

# Recarregar após ativar/desativar
sudo systemctl reload nginx

📜 Logs do Nginx

# Ver últimos erros
sudo tail -20 /var/log/nginx/error.log

# Acompanhar erros em tempo real
sudo tail -f /var/log/nginx/error.log

# Ver últimos acessos
sudo tail -20 /var/log/nginx/access.log

# Limpar logs
sudo truncate -s 0 /var/log/nginx/error.log
sudo truncate -s 0 /var/log/nginx/access.log
⚠️ Atenção: O log de erro é essencial para diagnosticar problemas como 502 Bad Gateway.

❌ Erros Comuns e Soluções

502 Bad Gateway

Nginx não consegue se comunicar com o Gunicorn.

# Verificar se o socket existe
ls -la /var/www/nome-do-site/nome-do-site.sock

# Verificar se Gunicorn está rodando
ps aux | grep gunicorn

# Verificar permissões do socket
# O socket deve ser do usuário www-data

# Verificar se o caminho no Nginx está correto
sudo nginx -T | grep proxy_pass

403 Forbidden

Problema de permissão.

# Corrigir permissões
sudo chown -R www-data:www-data /var/www/nome-do-site
sudo chmod -R 755 /var/www/nome-do-site

nginx: [emerg] "server_name" directive is not allowed here

Erro de sintaxe no arquivo de configuração.

# Testar para ver o erro exato
sudo nginx -t

# O comando mostra a linha do erro

Porta 80 já em uso

# Ver o que está usando a porta
sudo lsof -i :80

# Ou
sudo netstat -tlnp | grep :80
💡 Boas práticas:
  • ✅ Sempre faça nginx -t antes de recarregar
  • ✅ Mantenha um arquivo por site em sites-available
  • ✅ Use nomes descritivos para os arquivos (ex: meusite.com.br)
  • ✅ Faça backup das configurações antes de alterar
  • ✅ Após ativar um site, teste com curl -I http://seudominio.com.br

Manual Técnico - Última atualização: Março 2026