61 lines
2.2 KiB
Bash
Executable File
61 lines
2.2 KiB
Bash
Executable File
#!/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'."
|