Este guia abrange Ubuntu, Rocky Linux e Arch Linux, com soluções para problemas comuns e geração de certificados SSL gratuitos.


🛠️ Instalação do Nginx

Ubuntu/Debian

sudo apt update
sudo apt install nginx
sudo systemctl start nginx
sudo systemctl enable nginx

Rocky Linux/CentOS

sudo dnf install nginx
sudo systemctl start nginx
sudo systemctl enable nginx

Arch Linux

sudo pacman -S nginx-mainline
sudo systemctl start nginx
sudo systemctl enable nginx

🔧 Configuração Básica

1. Configurar Bloco de Servidor (Virtual Host)

  • Crie um arquivo em /etc/nginx/sites-available/meusite.conf (Ubuntu/Rocky) ou /etc/nginx/conf.d/meusite.conf (Arch):
server {
    listen 80;
    server_name meudominio.com www.meudominio.com;
    root /var/www/meusite;
    index index.html;

    # Redireciona todo tráfego HTTP para HTTPS (após gerar o certificado)
    return 301 https://$host$request_uri;  # ← Comente esta linha se ainda não tem HTTPS

    location / {
        try_files $uri $uri/ =404;
    }
}
  • Crie um link simbólico (Ubuntu/Rocky):
sudo ln -s /etc/nginx/sites-available/meusite.conf /etc/nginx/sites-enabled/

2. Testar e Recarregar

sudo nginx -t       # Verificar erros de sintaxe
sudo systemctl reload nginx

3. Firewall

  • Ubuntu:
sudo ufw allow 'Nginx Full'
  • Rocky Linux:
sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --reload
  • Arch Linux (usando nftables ou iptables):
sudo nft add rule inet filter input tcp dport {80, 443} counter accept

🔒 Fortalecendo a Segurança

1. Ocultar Versão do Nginx

Adicione ao arquivo /etc/nginx/nginx.conf:

server_tokens off;

2. Limitar Requisições (Prevenção a DDoS/Brute Force)

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
}

server {
    location / {
        limit_req zone=one burst=20;
    }
}

3. Configurar SSL/TLS (configurar após gerar o SSL)

Adicionar abaixo do server{} já existente no arquivo .conf do seu site.

server {
    # Porta e protocolo
    listen 443 ssl http2;
    server_name SEUDOMINIO.COM www.SEUDOMINIO.COM;

    # Certificados SSL (substitua pelos caminhos corretos)
    ssl_certificate /etc/letsencrypt/live/SEUDOMINIO.COM/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/SEUDOMINIO.COM/privkey.pem;

    # Configurações de segurança SSL
    ssl_protocols TLSv1.2 TLSv1.3;  # Suporta apenas TLS 1.2 e 1.3 (mais seguro)
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;  # Cifras modernas
    ssl_prefer_server_ciphers on;  # Prioriza as cifras do servidor
    ssl_session_cache shared:SSL:10m;  # Cache de sessão SSL para melhor desempenho
    ssl_session_timeout 10m;  # Tempo de vida da sessão SSL
    ssl_stapling on;  # Habilita OCSP Stapling para melhorar a segurança
    ssl_stapling_verify on;  # Verifica a resposta OCSP

    # Resolver para OCSP Stapling
    resolver 8.8.8.8 8.8.4.4 valid=300s;  # Usa DNS públicos do Google
    resolver_timeout 5s;

    # Headers de segurança
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";  # HSTS
    add_header X-Content-Type-Options "nosniff";  # Evita MIME type sniffing
    add_header X-Frame-Options "SAMEORIGIN";  # Impede clickjacking
    add_header X-XSS-Protection "1; mode=block";  # Proteção contra XSS
    add_header Referrer-Policy "strict-origin";  # Controla o envio de referrer

    # Diretório raiz do site (substitua pelo caminho correto)
    root /var/www/SEUDOMINIO.COM;
    index index.html index.htm;

    # Configuração de localização padrão
    location / {
        try_files $uri $uri/ =404;  # Tenta servir arquivos estáticos ou retorna 404
    }

    # Bloqueia acesso a arquivos ocultos (ex: .env, .git)
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

    # Cache para arquivos estáticos (imagens, CSS, JS, etc.)
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
        expires 365d;  # Cache de 1 ano
        access_log off;  # Desativa logs para melhorar desempenho
    }

    # Página de erro 404 personalizada
    error_page 404 /404.html;
    location = /404.html {
        internal;  # Acesso interno apenas
    }

    # Página de erro 50x personalizada
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        internal;
    }
}

🚨 Solução de Problemas Comuns

1. Erro 403 Forbidden

  • Verifique permissões do diretório root:
sudo chown -R www-data:www-data /var/www/meusite  # Ubuntu
sudo chown -R nginx:nginx /var/www/meusite        # Rocky/Arch

2. Porta 80 já em uso

  • Identifique o processo conflitante:
sudo lsof -i :80
# Encerre o processo (ex: Apache) ou ajuste a configuração do Nginx.

3. Erro de Sintaxe no NGINX

sudo nginx -t  # Mostra o erro exato e o arquivo afetado.

4. 502 Bad Gateway

  • Geralmente causado por erro no backend (ex: PHP-FPM não está rodando):
sudo systemctl status php-fpm  # Reinicie se necessário

🔐 Gerando Certificado SSL Gratuito com Let’s Encrypt

1. Instale o Certbot

  • Ubuntu:
sudo apt install certbot python3-certbot-nginx
  • Rocky Linux:
sudo dnf install epel-release
sudo dnf install certbot python3-certbot-nginx
  • Arch Linux:
sudo pacman -S certbot certbot-nginx

2. Obter Certificado

sudo certbot --nginx -d meudominio.com -d www.meudominio.com
  • Siga as instruções interativas. O Certbot atualizará automaticamente o arquivo de configuração do Nginx.

3. Renovação Automática

  • Teste a renovação:
sudo certbot renew --dry-run
  • Adicione um cron job (abrir crontab -e):
0 0 * * * /usr/bin/certbot renew --quiet

Habilitar no site

  • Volte ao passo Fortalecendo a Segurança no topico Configurar SSL/TLS para habilitar o certificado SSL gerado ao site.

Pronto! Seu Nginx está configurado, seguro e com HTTPS gratuito. Monitorize logs em /var/log/nginx/error.log para diagnóstico contínuo.