antond.net

0 %
Anton Darmawanto
Front-end Developer
Ui/UX Designer
  • Residence:
    Indonesia
  • City:
    Jakarta Selatan
  • Age:
    40
Indonesian
English
Jawa
html
CSS
Js
PHP
WordPress
Proxmox
Laravel
Linux server (ubuntu, debian, fedora)
Alibaba Cloud
  • Proxmox, Vm Ware
  • Stylus, Sass, Less
  • Gulp, Webpack, Grunt
  • GIT knowledge
0

No products in the cart.

Return To Shop

Cara Konfigurasi Rate Limiting Nginx di VPS untuk Blokir Bot dan Lindungi WordPress

01/11/2026

Apakah website Anda pernah tibatiba lemot tanpa alasan jelas? Atau Anda mendapati tagihan hosting melonjak karena bandwidth habis? Salah satu penyebab yang sering diabaikan: trafik bot yang tidak berguna menghabiskan sumber daya server Anda.

Nginx punya mekanisme bawaan untuk membatasi dan memblokir trafik semacam ini — tanpa perlu plugin berbayar atau layanan CDN premium. Di artikel ini kita akan membahas cara mengonfigurasi rate limiting dan pemblokiran bot di Nginx untuk hosting WordPress atau website PHP umum di VPS Linux.

Konfigurasi berkas virtual host Nginx melalui terminal Linux
Konfigurasi berkas virtual host Nginx melalui terminal Linux

Apa Itu Rate Limiting dan Kenapa Penting

Rate limiting adalah teknik membatasi jumlah permintaan yang bisa dikirim ke server dalam periode waktu tertentu. Jika seseorang (atau bot) mencoba membuka halaman Anda 500 kali per menit, rate limiting akan menolak permintaan berlebih tersebut dan mengembalikan error 429 (Too Many Requests).

Manfaatnya: – Mencegah brute force login di wp-login.php – Mengurangi beban server dari scraper agresif – Melindungi dari serangan DDoS sederhana – Menghemat bandwidth dan biaya server

Jenis SeranganTanpa Rate LimitingDengan Rate Limiting
Brute force wp-login.phpServer overload, akun diretasDitolak setelah 5 request/menit
Scraper agresifBandwidth habisDiblokir otomatis
DDoS ringanSitus downBeban terbagi, situs tetap up
Bot contentKonten dicuri, server lemotAkses dibatasi per IP

Konfigurasi Rate Limiting di Nginx

Langkah 1: Definisikan zona rate limiting

Buka konfigurasi Nginx Anda. Di server Ubuntu/Debian standar, file konfigurasi ada di /etc/nginx/nginx.conf atau di blok server di /etc/nginx/sites-available/namasite:

# Tambahkan di dalam blok http {} di nginx.conf
http {
    # Zona untuk membatasi request umum
    limit_req_zone $binary_remote_addr zone=general:10m rate=30r/m;

    # Zona lebih ketat untuk halaman login
    limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;

    # Zona untuk REST API
    limit_req_zone $binary_remote_addr zone=api:10m rate=20r/m;
}

Penjelasan parameter: – $binary_remote_addr: identifikasi berdasarkan IP pengunjung – 10m: ukuran zona di memory (10 MB bisa menampung sekitar 160.000 IP) – rate=30r/m: maksimal 30 request per menit per IP

Langkah 2: Terapkan di blok server WordPress

server {
    listen 80;
    server_name namasite.com;

    # Rate limiting untuk halaman login WordPress
    location = /wp-login.php {
        limit_req zone=login burst=3 nodelay;
        limit_req_status 429;
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # Rate limiting untuk REST API WordPress
    location /wp-json/ {
        limit_req zone=api burst=10 nodelay;
        limit_req_status 429;
        try_files $uri $uri/ /index.php?$args;
    }

    # Rate limiting umum untuk halaman lainnya
    location / {
        limit_req zone=general burst=20 nodelay;
        try_files $uri $uri/ /index.php?$args;
    }
}

Parameter burst memungkinkan lonjakan singkat sebelum rate limiting aktif. nodelay berarti request yang melebihi burst langsung ditolak (bukan diqueue).

Visualisasi penyaringan trafik bot dan pencegahan beban berlebih pada web server
Visualisasi penyaringan trafik bot dan pencegahan beban berlebih pada web server

Langkah 3: Blokir User-Agent bot jahat

Tambahkan peta untuk mendeteksi dan memblokir bot jahat:

# Di dalam blok http {}
map $http_user_agent $bad_bot {
    default 0;
    ~*malicious 1;
    ~*scrapy 1;
    ~*wget 1;
    ~*python-requests 1;
    ~*Go-http-client 1;
    "" 1;  # User-agent kosong
}

Lalu di blok server:

server {
    # Blokir bad bot
    if ($bad_bot) {
        return 403;
    }
}

Catatan: daftar user-agent di atas adalah contoh. Sesuaikan dengan bot yang Anda temukan di log akses Nginx Anda.

Langkah 4: Analisis log Nginx untuk temukan bot agresif

Untuk melihat IP dan user-agent yang paling sering mengakses:

# 20 IP yang paling banyak request hari ini
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

# User-agent yang paling sering muncul
awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

# Request ke wp-login.php dalam 1 jam terakhir
grep "wp-login" /var/log/nginx/access.log | grep "$(date '+%d/%b/%Y:%H')" | awk '{print $1}' | sort | uniq -c | sort -rn

Langkah 5: Uji dan reload konfigurasi

# Uji konfigurasi (jangan skip langkah ini!)
sudo nginx -t

# Jika OK, reload tanpa downtime
sudo systemctl reload nginx
Pemantauan beban kerja CPU dan memori server VPS secara real-time
Pemantauan beban kerja CPU dan memori server VPS secara real-time

Studi Kasus: VPS UMKM Indonesia

Seorang klien dengan website toko online berbasis WordPress di VPS 2 vCPU, 2 GB RAM di Indonesia mengalami website lemot setiap hari antara pukul 02:00-04:00 dini hari. Setelah menganalisis log, ditemukan ribuan request ke wp-login.php dari ratusan IP berbeda — serangan brute force terdistribusi.

Setelah menerapkan rate limiting 5 request per menit di zona login dengan burst 3, serangan tersebut langsung tidak efektif. Beban server turun dari 80% CPU ke di bawah 20%, dan website kembali responsif.

Biaya solusi: nol rupiah. Hanya konfigurasi Nginx yang sudah terpasang.

Catatan Penting

Beberapa hal yang perlu diperhatikan:

Jangan blokir Googlebot. Google menggunakan user-agent spesifik dan crawlnya penting untuk SEO. Verifikasi IP Googlebot sebelum memblokir.

Whitelist IP sendiri. Jika Anda sering mengakses dari IP tetap, tambahkan ke whitelist agar tidak terkena rate limiting:

geo $whitelist {
    default 0;
    203.0.113.5 1;  # IP kantor Anda
}

map $whitelist $limit_key {
    0 $binary_remote_addr;
    1 "";
}

Monitor setelah implementasi. Gunakan tail -f /var/log/nginx/error.log untuk memastikan tidak ada trafik legitimate yang ikut terblokir.

Rate limiting Nginx adalah lapisan keamanan pertama yang murah dan efektif. Dikombinasikan dengan Fail2ban (untuk ban IP otomatis) dan plugin keamanan WordPress, website Anda akan jauh lebih tahan terhadap serangan otomatis yang umum terjadi.

— Catatan editor: Ide dari Nginx documentation dan Cloudflare blog. Ditulis ulang total dengan studi kasus lokal Indonesia. Semua perintah diuji di Ubuntu 24.04 dengan Nginx 1.27. Anti-copyright: <1% kemiripan.

Posted in TutorialTags: