diff --git a/nginx/sites-available/default-catchall.conf b/nginx/sites-available/default-catchall.conf index a4d3faf..90b3382 100644 --- a/nginx/sites-available/default-catchall.conf +++ b/nginx/sites-available/default-catchall.conf @@ -1,28 +1,95 @@ # Ficheiro: /etc/nginx/sites-available/default-catchall.conf # -# Bloco "catch-all" (padrão) que responde a acessos diretos ao IP -# ou a hostnames não configurados, com uma página de erro 403 amigável e auto-contida. +# Bloco "catch-all" (padrão) otimizado para servir múltiplas páginas de erro HTML personalizadas. +# Responde a acessos diretos ao IP ou a hostnames não configurados. +# +# --- EXPLICAÇÃO DAS DIRETIVAS --- +# +# 1. DIRETIVAS DE ESCUTA (listen): +# - Mantidas como no original, escutando nas portas 80 e 443 (HTTP e HTTPS) +# - A opção "default_server" marca este bloco como o padrão para qualquer requisição +# que não corresponda a outro bloco "server" definido. +# +# 2. DIRETIVAS SSL (ssl_*): +# - Mantidas para usar o certificado "snakeoil" auto-assinado para HTTPS. +# +# 3. NOME DO SERVIDOR (server_name): +# - "server_name _;" é um nome especial que captura qualquer hostname que não +# tenha sido explicitamente definido em outros ficheiros de configuração. +# +# 4. GESTÃO DE LOGS (access_log, log_not_found): +# - Mantido como "off" para evitar poluir os ficheiros de log com requisições +# indesejadas que caem neste bloco. +# +# 5. DIRETÓRIO RAIZ (root): +# - Define o diretório base onde os seus ficheiros HTML de erro estarão localizados. +# - Ex: /var/www/html/errors +# +# 6. MAPEAMENTO DE ERROS (error_page): +# - Esta é a diretiva principal para esta configuração. Ela mapeia um ou mais +# códigos de status HTTP para uma URI interna. +# - Ex: "error_page 404 /404.html;" instrui o NGINX que, ao encontrar um erro 404, +# ele deve fazer uma requisição interna para "/404.html". +# - Agrupamos todos os erros 5xx (500, 502, 503, 504) para uma única página +# genérica de erro de servidor (50x.html), uma prática comum e eficiente. +# +# 7. BLOCOS DE LOCALIZAÇÃO INTERNA (location = /.html): +# - Criamos um bloco "location" para cada ficheiro de erro. +# - O sinal de igual ("=") garante uma correspondência exata e rápida da URI. +# - A diretiva "internal" é crucial para a segurança: ela especifica que estes +# ficheiros só podem ser acedidos através de requisições internas do NGINX +# (geradas pela diretiva "error_page"), e não por um pedido direto do cliente +# no navegador (ex: http://seu-ip/404.html retornará um erro). +# +# 8. AÇÃO PADRÃO (location /): +# - Este bloco captura todas as requisições que chegam a este servidor. +# - Em vez de servir um HTML embutido, agora simplesmente retornamos um código "404 Not Found". +# - Este "return 404;" aciona a diretiva "error_page 404 ...", que por sua vez +# serve o conteúdo do seu ficheiro /404.html personalizado. É uma forma limpa +# e semanticamente correta de lidar com um recurso que não existe. server { - # Escuta nas portas 80 e 443 e se declara o servidor padrão. + # --- Bloco 1: Configurações de Escuta e Servidor Padrão --- listen 80 default_server; listen [::]:80 default_server; listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; - # Usa o certificado "snakeoil" para a conexão HTTPS. + # --- Bloco 2: Configurações de SSL --- ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem; ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key; - # O server_name "_" captura qualquer hostname que não tenha sido definido. + # --- Bloco 3: Nome do Servidor --- server_name _; - # Desativa os logs para estas requisições, para não poluir os seus ficheiros. + # --- Bloco 4: Gestão de Logs --- access_log off; log_not_found off; - # --- LÓGICA FINAL E CORRIGIDA --- - # Retorna um código 403 (Acesso Proibido) e serve o nosso HTML personalizado diretamente. - # A variável $host será substituída pelo IP ou nome de domínio que o utilizador usou. - return 403 'Acesso Inválido

Acesso Inválido

Servidor Não Configurado

O nome de domínio $host que você tentou aceder não está configurado neste servidor.

Por favor, use a URL correta para aceder ao serviço desejado.

'; + # --- Bloco 5: Diretório Raiz para os Ficheiros de Erro --- + root /var/www/html/errors; + + # --- Bloco 6: Mapeamento de Códigos de Erro para Páginas Personalizadas --- + error_page 403 /403.html; + error_page 404 /404.html; + error_page 500 502 503 504 /50x.html; + + # --- Bloco 7: Lógica para Servir as Páginas de Erro de Forma Segura --- + location = /403.html { + internal; + } + + location = /404.html { + internal; + } + + location = /50x.html { + internal; + } + + # --- Bloco 8: Ação Padrão para Todas as Requisições --- + # Retorna 404 para qualquer URI, o que aciona a regra "error_page" correspondente. + location / { + return 404; + } }