#!/bin/bash # ============================================================================== # ISPConfig Proxy Cleanup Script - Version 1.1 # ============================================================================== # --- KONFIGURATION --- # Nutzt die zentrale Konfiguration des Proxy-Sync-Scripts CONF_FILE="/usr/local/bin/sync-ispconfig-proxy.conf" PROXY_CONF="/usr/local/bin/proxy_based_server.conf" CONFIG_DIR="/etc/nginx/conf.d/proxy_generated" # --- GLOBALE VARIABLEN --- DRY_RUN=true FILES_DELETED=false # --- FUNKTIONEN --- load_config() { [ -f "$CONF_FILE" ] && source "$CONF_FILE" || { echo "Fehler: $CONF_FILE fehlt"; exit 1; } } show_help() { cat << EOF Nutzung: $(basename "$0") [OPTIONEN] Vergleicht lokale Nginx-Konfigurationen mit der ISPConfig-Datenbank. Entfernt verwaiste Dateien, sofern sie nicht in der Blocklist stehen. Optionen: -e, --execute Führt Löschvorgänge und Nginx-Reload tatsächlich aus. -h, --help Zeigt diese Hilfe an. EOF } parse_params() { while [[ "$#" -gt 0 ]]; do case $1 in -e|--execute) DRY_RUN=false ;; -h|--help) show_help; exit 0 ;; *) echo "Fehler: Unbekannte Option $1"; show_help; exit 1 ;; esac shift done } get_blocklist() { # Extrahiert die Blocklist aus der proxy_based_server.conf sed -n '/^\[blocklist\]/,/^\[/p' "$PROXY_CONF" | grep -v '^\[' | grep -v '^#' | sed '/^$/d' } get_active_domains() { # Holt alle aktiven Domains aus der Datenbank mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -Bse "SELECT domain FROM web_domain WHERE active = 'y';" } run_cleanup() { local blocklist=$(get_blocklist) local db_domains=$(get_active_domains) if [ $? -ne 0 ]; then echo "Fehler: Datenbankverbindung fehlgeschlagen." >&2 exit 1 fi for file in "$CONFIG_DIR"/*.conf; do [ -e "$file" ] || continue local filename=$(basename "$file" .conf) # Prüfen, ob Datei in der Blocklist steht if echo "$blocklist" | grep -qxw "$filename"; then [ "$DRY_RUN" = true ] && echo "[SKIP] Blocklist: $filename" continue fi # Prüfen, ob Domain noch in der Datenbank existiert if ! echo "$db_domains" | grep -qxw "$filename"; then if [ "$DRY_RUN" = true ]; then echo "[Simuliert] Lösche verwaiste Datei: $file" FILES_DELETED=true else echo "Lösche veraltete Config: $file" rm "$file" FILES_DELETED=true fi fi done } reload_nginx() { if [ "$FILES_DELETED" = true ]; then if [ "$DRY_RUN" = true ]; then echo "[Simuliert] Syntax-Check und Reload: nginx -t && systemctl reload nginx" else echo "Änderungen vorgenommen. Prüfe Nginx Syntax..." # Sicherheitscheck: Nur bei Erfolg reloaden if nginx -t; then systemctl reload nginx echo "Nginx erfolgreich neu geladen." else echo "FEHLER: Nginx Syntax-Fehler! Kein Reload durchgeführt." >&2 exit 1 fi fi else echo "Keine Änderungen gefunden. Nginx-Betrieb unverändert." fi } # --- MAIN ENGINE --- main() { parse_params "$@" load_config [ "$DRY_RUN" = true ] && echo "--- DRY-RUN MODUS AKTIV (Keine Änderungen) ---" run_cleanup reload_nginx } main "$@"