Traffic spam dari luar negeri terutama China (Tiongkok) dan Vietnam sering menyebabkan masalah; terutama menggunakan server cloud VPS:
- Lonjakan traffic tidak valid
- Membebani server
- Risiko invalid traffic
- Data analytics jadi tidak akurat
Solusi paling efektif adalah memblokir langsung di level server linux (Nginx) menggunakan GeoIP2.
Konten ini membahas setup dari nol sampai auto update database.
Contents
- 1 Kenapa Block di Nginx Lebih Efektif?
- 2 STEP 1 — Install GeoIP2 Module
- 3 STEP 2 — Download Database GeoIP2
- 4 ⚙️ STEP 3 — Konfigurasi Nginx
- 5 STEP 4 — Terapkan di Website (HTTPS)
- 6 🔄 STEP 5 — Reload Nginx
- 7 ✅ HASIL
- 8 STEP 6 — Testing
- 9 🔄 STEP 7 — Auto Update GeoIP2 (WAJIB)
- 10 BEST PRACTICE
- 11 KESIMPULAN
- 12 Penutup
- 13 Related Posts
Kenapa Block di Nginx Lebih Efektif?
Dibanding CDN seperti Cloudflare, block di Nginx:
✅ Lebih cepat (langsung di server)
✅ Tidak bisa dibypass dengan mudah
✅ Mengurangi beban CPU & RAM
✅ Tidak memproses request ke aplikasi (WordPress/PHP)
STEP 1 — Install GeoIP2 Module
Untuk Ubuntu/Debian:
apt update
apt install nginx libnginx-mod-http-geoip2
Verifikasi module
nginx -V 2>&1 | grep geoip2
Kalau sudah aktif → lanjut
STEP 2 — Download Database GeoIP2
Daftar buat akun untuk dapatkan API-KEY di MaxMind: 👉 https://www.maxmind.com
Download GeoLite2 Country (.mmdb) menggunakan APi-key !
Kode perintah download:
cd /tmp && \
wget -O geoip.tar.gz "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country&license_key=LICENSE_KEY_KAMU&suffix=tar.gz" && \
tar -xzf geoip.tar.gz && \
mv GeoLite2-Country_*/GeoLite2-Country.mmdb /etc/nginx/geoip/
Cek ketersedian file:
ls -lh /etc/nginx/geoip/GeoLite2-Country.mmdb
⚙️ STEP 3 — Konfigurasi Nginx
Buka:
nano /etc/nginx/nginx.conf
Tambahkan di dalam http {}:
# load ini taruh paling atas (optional jika error!)
load_module modules/ngx_http_geoip2_module.so;
# kode bisa ditaruh bawah sebelum Rate limit & connection limit
geoip2 /etc/nginx/geoip/GeoLite2-Country.mmdb {
auto_reload 5m;
$geoip_country_code country iso_code;
}
# Block negara spam
map $geoip_country_code $blocked_country {
default 0;
CN 1; # China
VN 1; # Vietnam
}
STEP 4 — Terapkan di Website (HTTPS)
Edit config domain:
nano /etc/nginx/sites-available/domainkamu
- HTTP (port 80)
server {
listen 80;
server_name domainkamu.com; return 301 https://$host$request_uri;
}
HTTPS (port 443)
server {
listen 443 ssl http2;
server_name domainkamu.com; ssl_certificate /path/fullchain.pem;
ssl_certificate_key /path/privkey.pem;
# Cek ID negara
add_header X-Country-Code $geoip_country_code;
# BLOCK NEGARA IPGEO2
if ($blocked_country) {
return 403;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
}
🔄 STEP 5 — Reload Nginx
nginx -t
systemctl reload nginx
✅ HASIL
Sekarang:
- China 🇨🇳 → ❌ 403 (blocked)
- Vietnam 🇻🇳 → ❌ 403
- Indonesia 🇮🇩 → ✅ normal
Gunakan VPN Browser ektensi untuk ujicoba langsung traffic negara target!
STEP 6 — Testing
Test langsung traffic lokal :
curl -I https://domainkamu.com
Contoh hasil:
X-Country-Code: ID
🔄 STEP 7 — Auto Update GeoIP2 (WAJIB)
Database GeoIP harus di-update rutin agar tetap akurat.
🔧 Buat script update
nano /usr/local/bin/update-geoip.sh
Isi script:
#!/bin/bash
LICENSE_KEY="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"
TMP_DIR="/tmp/geoip"
DEST="/etc/nginx/geoip"
mkdir -p $TMP_DIR
cd $TMP_DIR || exit
# Download (pakai --location biar ikut redirect)
wget --quiet --show-progress --progress=bar:force:noscroll \
-O geoip.tar.gz \
"https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country&license_key=${LICENSE_KEY}&suffix=tar.gz"
# Cek file tidak kosong
if [ ! -s geoip.tar.gz ]; then
echo "Download gagal atau file kosong!"
exit 1
fi
# Extract
tar -xzf geoip.tar.gz
# Cari file mmdb
MMDB_FILE=$(find . -name "GeoLite2-Country.mmdb" | head -n 1)
if [ -z "$MMDB_FILE" ]; then
echo "File mmdb tidak ditemukan!"
exit 1
fi
# Copy ke nginx
cp "$MMDB_FILE" $DEST/
# Cleanup
rm -rf $TMP_DIR
# Reload nginx
systemctl reload nginx
echo "Update GeoIP berhasil"
🔐 Beri permission
chmod +x /usr/local/bin/update-geoip.sh
▶️ Test manual
/usr/local/bin/update-geoip.sh
⏰ Tambahkan cron job
crontab -e
Tambahkan:
0 3 1 * * /usr/local/bin/update-geoip.sh
👉 Update tiap bulan jam 03:00
BEST PRACTICE
✅ Disarankan
- Block hanya negara yang jelas spam
- Monitor log Nginx secara berkala
- Kombinasikan dengan rate limiting
❌ Hindari
- Block terlalu banyak negara (bisa ganggu SEO)
- Block berdasarkan user-agent “bot” secara umum
- Mengandalkan GeoIP saja tanpa monitoring
KESIMPULAN
Dengan setup ini kamu mendapatkan:
✅ Block traffic spam dari China & Vietnam
✅ Server lebih ringan
✅ Data analytics lebih bersih
✅ Risiko invalid traffic AdSense berkurang
✅ Database IP selalu update otomatis
Penutup
Block di level Nginx + GeoIP2 adalah salah satu cara paling efektif untuk:
👉 menjaga kualitas traffic
👉 melindungi monetisasi
👉 meningkatkan performa server