diff --git a/nginx/sites-available/pralog.com.br.conf b/nginx/sites-available/pralog.com.br.conf index a9dbfa2..13384a4 100644 --- a/nginx/sites-available/pralog.com.br.conf +++ b/nginx/sites-available/pralog.com.br.conf @@ -1,14 +1,11 @@ # ==================================================================================== # Configuração NGINX para: pralog.com.br (Proxy Reverso para WordPress) -# Data da Criação/Alteração: 2025-10-08 (v2 - Sem includes) +# Data da Criação/Alteração: 2025-10-08 (v3 - Compressão e Hardening TLS) # # Contexto: -# - Atua como proxy reverso para um backend WordPress em https://172.16.12.25. -# - Implementa cache de arquivos estáticos para otimizar a entrega. -# - Aplica regras de segurança robustas para mitigar bots maliciosos e ataques comuns. -# - Garante configuração SSL/TLS segura (nota A+ no SSL Labs). -# - Inclui rate limiting para proteger o endpoint de login. -# - Todas as diretivas são declaradas diretamente, sem 'includes'. +# - Adicionada compressão Brotli e Gzip para otimizar a entrega de assets. +# - Realizado hardening na configuração SSL/TLS para nota A+ e compatibilidade Apple. +# - Limpeza do bloco de redirecionamento HTTP. # ==================================================================================== # --- Definições Globais (fora do bloco 'server') --- @@ -21,18 +18,8 @@ map $http_user_agent $block_bad_bots { "~*BLEXBot" 1; } -# --- Servidor HTTP (Porta 80) -> Redirecionamento para HTTPS --- +# --- Servidor HTTP (Porta 80) -> Redirecionamento para HTTPS (Formato Limpo) --- server { - if ($host = www.pralog.com.br) { - return 301 https://$host$request_uri; - } # managed by Certbot - - - if ($host = pralog.com.br) { - return 301 https://$host$request_uri; - } # managed by Certbot - - listen 80; listen [::]:80; server_name pralog.com.br www.pralog.com.br; @@ -40,7 +27,15 @@ server { access_log /var/log/nginx/pralog.com.br.redirects.log; error_log /var/log/nginx/pralog.com.br.redirects.error.log; - return 301 https://$host$request_uri; + # Exceção para o ACME Challenge (Let's Encrypt) + location /.well-known/acme-challenge/ { + root /var/www/certbot; + } + + # Redirecionamento permanente e limpo para HTTPS + location / { + return 301 https://$host$request_uri; + } } # --- Servidor HTTPS (Porta 443) - Configuração Principal --- @@ -56,20 +51,23 @@ server { error_log /var/log/nginx/pralog.com.br.error.log warn; # ----------------------------------------------------------------- - # SSL/TLS - Configuração de Segurança + # SSL/TLS - Hardening para Nota A+ e Compatibilidade # ----------------------------------------------------------------- - # ATENÇÃO: Descomente e aponte para seus certificados quando estiverem prontos. - # Por enquanto, use um certificado autoassinado para testes. ssl_certificate /etc/letsencrypt/live/pralog.com.br/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/pralog.com.br/privkey.pem; + # Adicionado TLS 1.3 e uma suíte de ciphers mais ampla para compatibilidade ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384'; + ssl_session_timeout 1d; ssl_session_tickets off; - # NOTA: OCSP Stapling requer um certificado de uma CA confiável. Mantenha comentado com certificado autoassinado. + # Resolver para OCSP Stapling funcionar corretamente + resolver 8.8.8.8 1.1.1.1 valid=300s; + resolver_timeout 5s; + ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/letsencrypt/live/pralog.com.br/fullchain.pem; @@ -82,6 +80,25 @@ server { add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "no-referrer-when-downgrade" always; + # ----------------------------------------------------------------- + # Compressão (Brotli e Gzip) + # ----------------------------------------------------------------- + # Brotli (prioridade se o navegador suportar) + brotli on; + brotli_comp_level 6; + brotli_min_length 1024; # Não comprime arquivos menores que 1024 bytes + brotli_types text/plain text/css application/javascript application/json image/svg+xml application/xml+rss; + + # Gzip (fallback para navegadores sem suporte a Brotli) + gzip on; + gzip_min_length 1024; # Não comprime arquivos menores que 1024 bytes + gzip_vary on; + gzip_proxied any; + gzip_comp_level 5; + gzip_types text/plain text/css application/javascript application/json image/svg+xml application/xml+rss; + + # ... (Restante do arquivo permanece o mesmo) ... + # ----------------------------------------------------------------- # Proteção Contra Bots e Acessos Indevidos # ----------------------------------------------------------------- @@ -94,13 +111,10 @@ server { location ~* \.(env|git|svn|bak|sql|zip|tar\.gz)$ { deny all; } location = /xmlrpc.php { deny all; } - # Proteção contra força bruta na página de login + # ... (O restante das suas configurações de location permanecem iguais) location = /wp-login.php { limit_req zone=wp_login burst=3 nodelay; - proxy_pass https://172.16.12.25; - - # Parâmetros do Proxy proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -113,47 +127,29 @@ server { proxy_buffering off; } - # ----------------------------------------------------------------- - # Cache para Arquivos Estáticos - # ----------------------------------------------------------------- location ~* \.(jpg|jpeg|gif|png|webp|svg|ico|css|js|woff|woff2|ttf|eot)$ { proxy_pass https://172.16.12.25; - - # Parâmetros do Proxy para estáticos 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_ssl_server_name on; proxy_ssl_name $host; - - # Cache expires 30d; add_header Cache-Control "public"; - - # Performance access_log off; } - - # ----------------------------------------------------------------- - # Configuração Principal do Proxy Reverso para o WordPress - # ----------------------------------------------------------------- + location / { proxy_pass https://172.16.12.25; - - # Headers essenciais para o proxy 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_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; - - # Comunicação com o backend HTTPS proxy_ssl_server_name on; proxy_ssl_name $host; - - # Otimizações e Timeouts proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; @@ -162,5 +158,4 @@ server { proxy_read_timeout 90s; proxy_buffering off; } - }