diff --git a/nginx/sites-available/ferreirareal.com.br.conf b/nginx/sites-available/ferreirareal.com.br.conf index f57d297..57f9783 100644 --- a/nginx/sites-available/ferreirareal.com.br.conf +++ b/nginx/sites-available/ferreirareal.com.br.conf @@ -1,105 +1,110 @@ -# Ficheiro: /etc/nginx/sites-available/ferreirareal.com.br.conf +# ============================================================================== +# ARQUIVO: /etc/nginx/sites-available/ferreirareal.com.br.conf +# AUTOR: Gemini (Especialista NGINX) +# DATA: 21/09/2025 # -# Configuração de Proxy Reverso OTIMIZADA com redirecionamento canónico -# para o site www.ferreirareal.com.br. Esta versão é pública e usa snippets para -# a máxima consistência e performance. +# DESCRIÇÃO: +# Configuração de PROXY REVERSO COM CACHE OTIMIZADO para um backend que serve +# conteúdo estático. Maximiza a performance e a resiliência, reduzindo a +# carga no servidor de origem (172.16.12.5). +# +# ESTRUTURA: +# - BLOCO 1: Redireciona todo o tráfego HTTP para HTTPS com 'www'. +# - BLOCO 2: Redireciona HTTPS sem 'www' para a versão canónica com 'www'. +# - BLOCO 3: Servidor principal que atua como proxy, servindo conteúdo do +# cache e contactando o backend quando necessário. +# ============================================================================== # ============================================================================== -# BLOCO 1: Redirecionar todo o tráfego da porta 80 para a versão segura COM WWW +# BLOCO 1: Redirecionamento de HTTP (porta 80) para HTTPS COM WWW # ============================================================================== server { - if ($host = ferreirareal.com.br) { - return 301 https://$host$request_uri; - } # managed by Certbot - - - if ($host = www.ferreirareal.com.br) { - return 301 https://$host$request_uri; - } # managed by Certbot - - listen 80; listen [::]:80; - # Apanha ambos os domínios, com e sem 'www'. server_name ferreirareal.com.br www.ferreirareal.com.br; -include /etc/nginx/snippets/custom_errors.conf; # Carrega as páginas de erro personalizadas - # Permite a validação do Let's Encrypt. + # Permite a validação do Let's Encrypt sem interferir no redirecionamento. location /.well-known/acme-challenge/ { root /var/www/html; } - # Redireciona todo o outro tráfego para a URL final e correta (com www). + # Redireciona permanentemente (301) todo o outro tráfego para a URL canónica. location / { return 301 https://www.ferreirareal.com.br$request_uri; } } # ============================================================================== -# BLOCO 2: Redirecionar o tráfego HTTPS SEM WWW para a versão COM WWW +# BLOCO 2: Redirecionamento de HTTPS SEM WWW para a versão COM WWW # ============================================================================== server { listen 443 ssl http2; listen [::]:443 ssl http2; - # Apanha APENAS o domínio sem 'www'. server_name ferreirareal.com.br; -include /etc/nginx/snippets/custom_errors.conf; # Carrega as páginas de erro personalizadas - - # Envia um redirecionamento permanente para a versão canónica com 'www'. - return 301 https://www.ferreirareal.com.br$request_uri; ssl_certificate /etc/letsencrypt/live/www.ferreirareal.com.br/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/www.ferreirareal.com.br/privkey.pem; # managed by Certbot + include /etc/nginx/snippets/ssl_params.conf; + + return 301 https://www.ferreirareal.com.br$request_uri; } # ============================================================================== -# BLOCO 3: O SERVIDOR PRINCIPAL E CANÓNICO (HTTPS COM WWW) +# BLOCO 3: Servidor Principal - PROXY REVERSO COM CACHE (HTTPS COM WWW) # ============================================================================== server { listen 443 ssl http2; listen [::]:443 ssl http2; - # Apanha o domínio canónico com 'www'. server_name www.ferreirareal.com.br; -include /etc/nginx/snippets/custom_errors.conf; # Carrega as páginas de erro personalizadas - # Inclui o nosso "kit" de segurança SSL com cifras modernas e cabeçalhos. + # --- CONFIGURAÇÕES DE SSL --- + ssl_certificate /etc/letsencrypt/live/www.ferreirareal.com.br/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/www.ferreirareal.com.br/privkey.pem; # managed by Certbot include /etc/nginx/snippets/ssl_params.conf; - # --- Políticas de Acesso e Logs --- - # NÃO incluímos a trava de rede interna nem o robots_block_all.conf. - # O backend deve gerir o seu próprio robots.txt permissivo. - access_log /var/log/nginx/access.log detailed_proxy; - error_log /var/log/nginx/error.log; + # --- CABEÇALHOS DE SEGURANÇA --- + # Adicionados pelo proxy para garantir a segurança no navegador do cliente. + add_header X-Frame-Options "SAMEORIGIN" always; + add_header X-Content-Type-Options "nosniff" always; + + # --- LOGS --- + access_log /var/log/nginx/ferreirareal.com.br.access.log; + error_log /var/log/nginx/ferreirareal.com.br.error.log warn; - # --- ESTRATÉGIA DE CACHE HÍBRIDA --- - proxy_cache static_cache; # Usa a nossa zona de cache para ficheiros estáticos. + # --- CONFIGURAÇÃO DE CACHE DE PROXY --- + # Define a zona de cache a ser usada (deve ser definida em nginx.conf). + proxy_cache static_cache; + # Adiciona um cabeçalho para depuração (HIT, MISS, BYPASS, EXPIRED). add_header X-Proxy-Cache $upstream_cache_status; - # Regra geral: NÃO cachear nada por defeito. - proxy_no_cache 1; - proxy_cache_bypass 1; - # Inclui os nossos cabeçalhos de proxy padrão. + # Entrega conteúdo antigo se o backend estiver com erro ou offline. + proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; + # Verifica com o backend se um arquivo expirado realmente mudou. + proxy_cache_revalidate on; + # Impede que múltiplas requisições para o mesmo recurso novo sobrecarreguem o backend. + proxy_cache_lock on; + + # --- PARÂMETROS DE PROXY --- + # Carrega configurações padrão para cabeçalhos de proxy (Host, X-Real-IP, etc). include /etc/nginx/snippets/proxy_params.conf; # --- REGRAS DE ROTEAMENTO (LOCATIONS) --- # 1. Rota para Ficheiros Estáticos (Cache Agressivo) location ~* \.(?:css|js|mjs|svg|gif|png|jpg|jpeg|ico|wasm|woff2?|ttf|eot)$ { - # Usa o nosso snippet de cache mais agressivo para a máxima performance. - include /etc/nginx/snippets/cache_static_assets.conf; + # Define um tempo de cache longo para assets que não mudam com frequência. + proxy_cache_valid 200 30d; proxy_pass http://172.16.12.5:80; + # Opcional: desativa logs de acesso para assets para manter os logs limpos. + access_log off; } - - # 2. Rota Principal para a Aplicação (Cache Curto) - # Apanha todo o resto do tráfego (páginas HTML, APIs, etc.). + + # 2. Rota Principal para a Aplicação (HTML, etc., com cache curto) location / { - # Ativa o cache, mas por um período curto (5 minutos). - proxy_no_cache 0; - proxy_cache_bypass 0; - proxy_cache_valid 200 5m; - + # Define um tempo de cache curto para arquivos HTML que podem mudar mais vezes. + proxy_cache_valid 200 10m; proxy_pass http://172.16.12.5:80; } - ssl_certificate /etc/letsencrypt/live/www.ferreirareal.com.br/fullchain.pem; # managed by Certbot - ssl_certificate_key /etc/letsencrypt/live/www.ferreirareal.com.br/privkey.pem; # managed by Certbot + # --- PÁGINAS DE ERRO PERSONALIZADAS --- + include /etc/nginx/snippets/custom_errors.conf; }