diff --git a/nginx/sites-available/itguys.com.br.conf b/nginx/sites-available/itguys.com.br.conf index f0d1c47..38e279c 100644 --- a/nginx/sites-available/itguys.com.br.conf +++ b/nginx/sites-available/itguys.com.br.conf @@ -1,117 +1,99 @@ # Ficheiro: /etc/nginx/sites-available/itguys.com.br.conf # -# Configuração de Proxy Reverso com Cache Inteligente e Otimizado, -# para um site maioritariamente estático com um formulário de contacto dinâmico. +# Configuração de Proxy Reverso OTIMIZADA com redirecionamento canónico +# para o site itguys.com.br, resolvendo erros de SSL intermitentes. # ============================================================================== -# BLOCO HTTP: Redirecionar todo o tráfego para a versão segura e canónica (www) +# BLOCO 1: Redirecionar todo o tráfego da porta 80 para a versão segura e com WWW # ============================================================================== server { listen 80; listen [::]:80; - # Escuta por ambos os domínios, com e sem 'www', para apanhar todos os pedidos. + # Apanha ambos os domínios, com e sem 'www'. server_name itguys.com.br www.itguys.com.br; - # Regra especial para a validação do Let's Encrypt funcionar corretamente. + # Permite a validação do Let's Encrypt. location /.well-known/acme-challenge/ { root /var/www/html; } - # Para todas as outras requisições, envia um redirecionamento permanente (301) - # para a versão segura (https) e com 'www'. + # Redireciona todo o outro tráfego para a URL final e correta. location / { return 301 https://www.itguys.com.br$request_uri; } } # ============================================================================== -# BLOCO HTTPS: O Coração da nossa Configuração +# BLOCO 2: Redirecionar o tráfego HTTPS sem WWW para a versão com WWW # ============================================================================== server { listen 443 ssl http2; listen [::]:443 ssl http2; - - # Define ambos os nomes de servidor para que o Nginx use o certificado correto. - # O primeiro nome é considerado o principal. - server_name www.itguys.com.br itguys.com.br; - include /etc/nginx/snippets/global_robots.conf; - # --- Certificados SSL (Geridos pelo Certbot) --- - # O Certbot irá preencher estas linhas. + # Apanha APENAS o domínio sem 'www'. + server_name itguys.com.br; + + # Usa o mesmo certificado, pois ele é válido para ambos os nomes. ssl_certificate /etc/letsencrypt/live/www.itguys.com.br/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.itguys.com.br/privkey.pem; - # --- Cabeçalhos de Segurança Padrão --- - add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; - add_header X-Content-Type-Options "nosniff" always; - add_header X-Frame-Options "SAMEORIGIN" always; + # Envia um redirecionamento permanente para a versão canónica com 'www'. + return 301 https://www.itguys.com.br$request_uri; +} + +# ============================================================================== +# BLOCO 3: O SERVIDOR PRINCIPAL E CANÓNICO (HTTPS com WWW) +# ============================================================================== +server { + listen 443 ssl http2; + listen [::]:443 ssl http2; + # Apanha APENAS o domínio canónico com 'www'. + server_name www.itguys.com.br; + + # --- Certificados e Segurança --- + ssl_certificate /etc/letsencrypt/live/www.itguys.com.br/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/www.itguys.com.br/privkey.pem; + include /etc/nginx/snippets/ssl_params.conf; # Inclui as nossas definições de segurança SSL + include /etc/nginx/snippets/robots_block_all.conf; # Usa o robots.txt genérico # --- Configurações de Log --- - # Usa o nosso formato de log JSON detalhado que já configurámos globalmente no nginx.conf. access_log /var/log/nginx/access.log detailed_proxy; error_log /var/log/nginx/error.log; - # --- ESTRATÉGIA DE CACHE HÍBRIDA E SEGURA --- - # Usa a nossa zona de cache pública. + # --- ESTRATÉGIA DE CACHE HÍBRIDA --- proxy_cache zabbix_cache; - # Adiciona um cabeçalho de depuração para vermos o status do cache. add_header X-Proxy-Cache $upstream_cache_status; - # Regra geral: NÃO cachear nada por defeito. proxy_no_cache 1; proxy_cache_bypass 1; + include /etc/nginx/snippets/proxy_params.conf; # Inclui os nossos cabeçalhos de proxy padrão - # --- CABEÇALHOS DE PROXY GLOBAIS --- - # Estes cabeçalhos serão herdados por todas as 'location' abaixo. - 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; + # --- REGRAS DE ROTEAMENTO (LOCATIONS) --- - # --- LOCALIZAÇÃO PARA O FORMULÁRIO DE CONTACTO (SEM CACHE) --- - # O '=' indica uma correspondência exata da URI, o que é mais eficiente. + # Localização para o formulário (sem cache) location = /php/enviar.php { - # Desativa o cache completamente para esta localização. proxy_no_cache 1; proxy_cache_bypass 1; - proxy_pass http://172.16.12.17:80; } - # --- LOCALIZAÇÃO PARA FICHEIROS ESTÁTICOS (CACHE LONGO) --- - # Esta regra apanha os ficheiros que são seguros para cachear. + # Localização para ficheiros estáticos (cache longo) location ~* \.(jpg|jpeg|gif|png|webp|svg|css|js|ico|woff2|ttf|json)$ { - # Ativa o cache para estes ficheiros. - proxy_no_cache 0; - proxy_cache_bypass 0; - # Define que as respostas válidas (código 200) ficam no cache por 60 minutos. - proxy_cache_valid 200 60m; - # Instrui o NAVEGADOR do cliente a guardar uma cópia por 7 dias. - expires 7d; - + include /etc/nginx/snippets/cache_aggressive_static.conf; # Usa o nosso cache agressivo proxy_pass http://172.16.12.17:80; } - # --- LOCALIZAÇÃO PARA PÁGINAS HTML ESTÁTICAS (CACHE LONGO) --- - # Esta regra apanha especificamente as páginas Sobre.html e Serviços.html. + # Localização para páginas HTML estáticas (cache longo) location ~* ^/(Sobre|Serviços)\.html$ { - # Ativa o cache para estas páginas. proxy_no_cache 0; proxy_cache_bypass 0; - # Define um tempo de cache longo (1 hora) para estas páginas que raramente mudam. proxy_cache_valid 200 1h; - proxy_pass http://172.16.12.17:80; } - # --- LOCALIZAÇÃO PRINCIPAL PARA O RESTO DO SITE (CACHE CURTO) --- - # Apanha as páginas HTML restantes (como a index.html). + # Localização principal para o resto do site (cache curto) location / { - # Ativa o cache, mas por um período curto (5 minutos). - # Isto acelera a navegação sem o risco de mostrar conteúdo muito desatualizado. proxy_no_cache 0; proxy_cache_bypass 0; proxy_cache_valid 200 5m; - proxy_pass http://172.16.12.17:80; } } -