From 0dc7110f1e86e1020e39ac2670048a054a150388 Mon Sep 17 00:00:00 2001 From: "srvproxy001.itguys.com.br" Date: Sun, 21 Sep 2025 00:00:26 -0300 Subject: [PATCH] =?UTF-8?q?[Auto-Sync]=20Atualiza=C3=A7=C3=A3o=20das=20con?= =?UTF-8?q?figura=C3=A7=C3=B5es=20em=20srvproxy001.itguys.com.br=20-=20202?= =?UTF-8?q?5-09-21=2000:00:26?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nginx/sites-available/add_error_pages.sh | 104 +++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100755 nginx/sites-available/add_error_pages.sh diff --git a/nginx/sites-available/add_error_pages.sh b/nginx/sites-available/add_error_pages.sh new file mode 100755 index 0000000..e6600c6 --- /dev/null +++ b/nginx/sites-available/add_error_pages.sh @@ -0,0 +1,104 @@ +#!/bin/bash + +# ============================================================================== +# SCRIPT PARA ADICIONAR O SNIPPET DE ERROS PERSONALIZADOS +# +# Descrição: Este script percorre todos os ficheiros de configuração de site +# em /etc/nginx/sites-available/ e adiciona a diretiva +# 'include /etc/nginx/snippets/custom_errors.conf;' aos 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" + +# --- 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 + +# Verifica se o ficheiro do snippet existe antes de continuar. +if [ ! -f "$SNIPPET_PATH" ]; then + echo "ERRO: O ficheiro do snippet '${SNIPPET_PATH}' não foi encontrado." >&2 + echo "Por favor, crie o ficheiro de snippet antes de executar este script." >&2 + exit 1 +fi + +# Percorre cada ficheiro de configuração 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 + + # Usa 'awk' para processar o ficheiro. + # Esta abordagem é mais segura do que 'sed' para inserções complexas. + awk -v snippet_line=" ${SNIPPET_LINE}" ' + BEGIN { + in_https_server_block = 0 + snippet_added = 0 + } + + # Verifica se a linha já existe no ficheiro para evitar duplicação. + /include \/etc\/nginx\/snippets\/custom_errors.conf;/ { + snippet_exists = 1 + } + + # Deteta o início de um bloco 'server' que escuta na porta 443. + /server *{/ { + # Lê as próximas linhas para ver se contêm 'listen 443 ssl'. + getline line1 + getline line2 + if (line1 ~ /listen 443 ssl/ || line2 ~ /listen 443 ssl/) { + in_https_server_block = 1 + } + # Imprime as linhas que já lemos. + print $0 + print line1 + print line2 + next + } + + # Deteta o fim de um bloco de servidor. + /}/ { + if (in_https_server_block) { + in_https_server_block = 0 + } + } + + # Se estivermos dentro de um bloco HTTPS e encontrarmos a linha 'server_name', + # adicionamos o nosso snippet depois dela. + /server_name/ { + print $0 + if (in_https_server_block && !snippet_added && !snippet_exists) { + print snippet_line + snippet_added = 1 + } + next + } + + # Imprime todas as outras linhas. + { print } + + ' "$file" > "${file}.tmp" && sudo mv "${file}.tmp" "$file" + + # Informa o utilizador sobre o que foi feito. + if grep -q "include ${SNIPPET_PATH};" "$file"; then + info "Snippet de erros verificado/adicionado em: $(basename "$file")" + 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'."