Ada berbagai macam metode untuk memblokir akses ke situs yang dihosting menggunakan web server Nginx. Mulai dari blokir menggunakan alamat IP pengunjung, langsung per negara, berapa kali konten diminta, dan yang saya bahas kali ini melalui identitas pengunjungnya. Maksudnya identitas disini adalah user agent yang umum dilaporkan oleh browser atau aplikasi saat meminta konten dari server. Dan ini cukup unik sehingga bisa dijadikan dasar aturannya.

Dalam membahas masalah ini sebenarnya saya juga sedang berusaha mengatasinya pada salah satu website yang berisi banyak gambar, entah kenapa kok banyak yang suka mendownload semuanya. Ini cukup memberatkan kerja Nginx karena yang diunduh bukan hanya gambar dan foto tapi halaman situsnya. Padahal sudah diwatermark. Heran saya. Haha. 😀

Kalau saya baca dari log Nginx cukup banyak yang menggunakan user agent wget dan curl. Wah… bukan browser ini tapi memang digunakan untuk mendownload konten. Karena menurut pertimbangan saya tidak ada manfaatnya kalau dibiarkan maka saya putuskan diblokir saja.

Ya, sekian ceritanya mari kita masuk ke fokus pembahasan. Langsung saja silahkan buka konfigurasi Nginx (nginx.conf):

nano /etc/nginx/nginx.conf

Saya gunakan salah satu lokasi defaultnya, bisa ditempat lain juga tergantung instalasinya dan distro Linux yang dipakai.

Setelah itu tambahkan kode berikut dalam blok http{}:

if ($http_user_agent ~* (wget|curl) ) {
    return 403;
}

Ini untuk blokir wget dan curl. Tentu saja bisa anda tambahkan yang lain. Sebenarnya tidak dibatasi seberapa banyaknya tapi kalau ingin blokir user agent secara massal lebih baik menggunakan Nginx map (ngx_http_map_module). Soalnya akan berpengaruh pada performa Nginx kalau banyak sekali yang dimasukkan dalam rulenya.

Oh ya, bagi anda yang asalnya dari dunia shared hosting (cPanel) atau Apache maka untuk blokir bot juga lewat cara yang dibahas karena tidak ada .htaccess. Jadi memang edit konfigurasi Nginx solusinya.