#!/bin/bash # ============================================================================== # SCRIPT PARA ADICIONAR O SNIPPET DE ERROS PERSONALIZADOS (VERSÃO ROBUSTA) # # Descrição: Este script percorre todos os ficheiros de configuração de site # e adiciona a diretiva 'include' para o snippet de erros # nos blocos de servidor HTTPS (porta 443). # ============================================================================== set -e # --- Variáveis de Configuração --- SITES_DIR="/etc/nginx/sites-available" SNIPPET_PATH="/etc/nginx/snippets/custom_errors.conf" SNIPPET_LINE=" include ${SNIPPET_PATH}; # Carrega as páginas de erro personalizadas" # Ponto de referência estável para a inserção da linha. ANCHOR_LINE="server_name" # --- Funções de Ajuda --- info() { echo -e "\e[32m[INFO]\e[0m $1"; } warn() { echo -e "\e[33m[AVISO]\e[0m $1"; } # --- Início da Execução --- info "Iniciando o processo de adição do snippet de erros..." if [ "$EUID" -ne 0 ]; then echo "ERRO: Este script precisa de ser executado como root." >&2 exit 1 fi if [ ! -f "$SNIPPET_PATH" ]; then echo "ERRO: O ficheiro do snippet '${SNIPPET_PATH}' não foi encontrado." >&2 exit 1 fi # Percorre cada ficheiro .conf no diretório de sites disponíveis. for file in "$SITES_DIR"/*.conf; do # Verifica se é um ficheiro regular. if [[ ! -f "$file" ]]; then continue fi # Verifica se o ficheiro contém um bloco de servidor HTTPS. if grep -q "listen 443 ssl" "$file"; then # Verifica se a linha do snippet JÁ NÃO EXISTE para evitar duplicação. if ! grep -q "include ${SNIPPET_PATH};" "$file"; then info "A adicionar o snippet de erros a: $(basename "$file")" # Usa 'sed' para inserir a nossa linha de include logo após a primeira # ocorrência da linha que contém 'server_name'. sudo sed -i "/${ANCHOR_LINE}/a ${SNIPPET_LINE}" "$file" else warn "O snippet já existe em $(basename "$file"). A ignorar." fi fi done echo "" info "Processo concluído!" info "Por favor, teste a sua nova configuração com 'sudo nginx -t' e depois recarregue com 'sudo systemctl reload nginx'."