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.