[Auto-Sync] Atualização das configurações em srvproxy001.itguys.com.br - 2025-09-21 00:00:26

This commit is contained in:
srvproxy001.itguys.com.br 2025-09-21 00:00:26 -03:00
parent c1c100b7eb
commit 0dc7110f1e
1 changed files with 104 additions and 0 deletions

View File

@ -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'."