Label

Kamis, 06 Februari 2025

Membuat Skrip Shell untuk Mengelola Proxy di Nginx secara Otomatis

Membuat Skrip Shell untuk Mengelola Proxy di Nginx secara Otomatis

Dalam artikel ini, saya akan membagikan sebuah skrip shell yang dapat digunakan untuk mengelola konfigurasi proxy di Nginx dengan mudah. Skrip ini memungkinkan pengguna untuk menambahkan, menghapus, dan menampilkan daftar proxy hanya dengan satu perintah sederhana.

Fitur Skrip

Skrip ini menyediakan beberapa perintah:

  • proksi -l → Menampilkan daftar domain yang diproxy.

  • proksi -b <domain> → Menghapus konfigurasi proxy untuk <domain>.

  • proksi -r -a <baru.abc.com> -b <host.abc.com> → Menambahkan proxy dengan redirect ke HTTPS.

  • proksi -tr -a <baru.abc.com> -b <host.abc.com> → Menambahkan proxy tanpa redirect ke HTTPS.

Instalasi Skrip

1. Buat Skrip Shell

Buka terminal dan buat file baru di /usr/local/bin/proksi:

sudo nano /usr/local/bin/proksi

Lalu salin dan tempel kode berikut:

#!/bin/bash

CONFIG_DIR="/etc/nginx/sites-available"
CONFIG_LINK_DIR="/etc/nginx/sites-enabled"
CERTBOT_CMD="certbot --nginx --agree-tos --email admin@abc.com --non-interactive"

# Fungsi menampilkan daftar domain yang di-proxy
list_proxies() {
    echo "Daftar domain yang diproxy:"
    ls "$CONFIG_DIR" | sed 's/.conf//'
}

# Fungsi menghapus konfigurasi proxy
remove_proxy() {
    local domain=$1
    if [ -z "$domain" ]; then
        echo "Gunakan: proksi -b <domain>"
        exit 1
    fi
    echo "Menghapus proxy untuk $domain..."
    rm -f "$CONFIG_DIR/$domain.conf"
    rm -f "$CONFIG_LINK_DIR/$domain.conf"
    nginx -t && systemctl reload nginx
    certbot delete --cert-name "$domain"
}

# Fungsi menambahkan proxy
add_proxy() {
    local domain="$1"
    local backend="$2"
    local redirect="$3"

    if [ -z "$domain" ] || [ -z "$backend" ]; then
        echo "Gunakan: proksi -r/-tr -a <baru.abc.com> -b <host.abc.com>"
        exit 1
    fi

    config_path="$CONFIG_DIR/$domain.conf"
    echo "Menambahkan proxy untuk $domain ke $backend..."

    if [ "$redirect" = "yes" ]; then
        cat > "$config_path" <<EOL
server {
    listen 80;
    server_name $domain;
    location / {
        return 301 https://\$host\$request_uri;
    }
}

server {
    listen 443 ssl;
    server_name $domain;
    ssl_certificate /etc/letsencrypt/live/$domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/$domain/privkey.pem;
    
    location / {
        proxy_pass http://$backend;
        proxy_set_header Host \$host;
        proxy_set_header X-Real-IP \$remote_addr;
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto \$scheme;
    }
}
EOL
    else
        cat > "$config_path" <<EOL
server {
    listen 80;
    server_name $domain;
    
    location / {
        proxy_pass http://$backend;
        proxy_set_header Host \$host;
        proxy_set_header X-Real-IP \$remote_addr;
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto \$scheme;
    }
}
EOL
    fi

    ln -sf "$config_path" "$CONFIG_LINK_DIR/$domain.conf"
    nginx -t && systemctl reload nginx

    if [ "$redirect" = "yes" ]; then
        echo "Menjalankan Certbot untuk HTTPS..."
        $CERTBOT_CMD -d "$domain"
    fi
}

# Parsing argument
case "$1" in
    -l) list_proxies ;;
    -b) remove_proxy "$2" ;;
    -r) add_proxy "$3" "$5" "yes" ;;  # -r -a <domain> -b <backend>
    -tr) add_proxy "$3" "$5" "no" ;;  # -tr -a <domain> -b <backend>
    *) echo "Gunakan:
       proksi -l                  (List proxy)
       proksi -b <domain>         (Hapus proxy)
       proksi -r -a <domain> -b <backend>  (Tambah proxy dengan HTTPS)
       proksi -tr -a <domain> -b <backend> (Tambah proxy tanpa HTTPS)"
       exit 1 ;;
esac

2. Beri Izin Eksekusi

Jalankan perintah berikut agar skrip dapat dieksekusi:

sudo chmod +x /usr/local/bin/proksi

Cara Penggunaan

  • Menampilkan daftar domain yang diproxy

    proksi -l
  • Menambahkan proxy dengan redirect ke HTTPS

    proksi -r -a baru.abc.com -b host.abc.com
  • Menambahkan proxy tanpa redirect ke HTTPS

    proksi -tr -a baru.abc.com -b host.abc.com
  • Menghapus proxy untuk domain tertentu

    proksi -b baru.abc.com

Kesimpulan

Dengan skrip ini, pengelolaan proxy di Nginx menjadi lebih mudah dan otomatis. Anda dapat menambah, menghapus, dan melihat daftar domain yang di-proxy hanya dengan satu perintah sederhana.

Tidak ada komentar:

Posting Komentar

Terbaru

modul pwm dengan arduino pro mini dilengkapi dengan batrai level meter 5 led

  🔋 Contoh Indikator Level Baterai dengan LED (4 Tingkat) 🔧 Tujuan: LED1 menyala jika tegangan ≥ 12.6V (full) LED2 menyala jika teg...

Lainya