Panduan Linux

Cara Membuat Rate Limiting pada NGINX

Rate limiting adalah teknik yang digunakan untuk mengontrol jumlah permintaan yang diterima oleh server dalam jangka waktu tertentu. Ini berguna untuk mencegah serangan DDoS, melindungi server dari beban berlebih, dan memastikan pengguna mendapatkan pengalaman yang adil. NGINX adalah salah satu web server yang populer dan mendukung fitur rate limiting dengan mudah. Berikut adalah langkah-langkah untuk membuat rate limiting pada NGINX.

1. Apa Itu Rate Limiting?

Rate limiting adalah cara untuk membatasi jumlah permintaan yang bisa dilakukan oleh klien ke server dalam periode waktu tertentu. Misalnya, kamu bisa membatasi 100 permintaan per menit dari satu alamat IP. Jika ada yang mencoba melebihi batas ini, NGINX akan menolak permintaan tersebut atau menundanya.

2. Mengapa Perlu Rate Limiting?

3. Cara Mengaktifkan Rate Limiting di NGINX

NGINX menyediakan modul ngx_http_limit_req_module untuk rate limiting. Berikut cara menggunakannya:

a. Konfigurasi Zona Pembatasan

Pertama, kamu perlu mendefinisikan zona pembatasan di blok http di file konfigurasi NGINX (biasanya nginx.conf atau di direktori sites-available).

http {
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
}

Penjelasan:

b. Menerapkan Pembatasan ke Lokasi atau Server

Setelah zona pembatasan didefinisikan, kamu bisa menerapkannya ke blok server atau location.

server {
    location / {
        limit_req zone=mylimit burst=20 nodelay;
        proxy_pass http://my_backend;
    }
}

Penjelasan:

4. Contoh Lain: Rate Limiting dengan Delay

Jika kamu ingin menunda permintaan yang melebihi batas, hapus nodelay.

server {
    location / {
        limit_req zone=mylimit burst=20;
        proxy_pass http://my_backend;
    }
}

Dengan konfigurasi ini, permintaan yang melebihi batas akan ditunda sampai bisa diproses.

5. Menggunakan Beberapa Zona Pembatasan

Kamu bisa membuat beberapa zona pembatasan untuk aturan yang berbeda. Misalnya, satu untuk halaman login dan satu lagi untuk halaman lainnya.

http {
    limit_req_zone $binary_remote_addr zone=login_limit:10m rate=5r/s;
    limit_req_zone $binary_remote_addr zone=general_limit:10m rate=10r/s;
}

server {
    location /login {
        limit_req zone=login_limit burst=10 nodelay;
        proxy_pass http://my_backend;
    }

    location / {
        limit_req zone=general_limit burst=20 nodelay;
        proxy_pass http://my_backend;
    }
}

6. Mengatur Status Code untuk Permintaan yang Ditolak

Secara default, NGINX akan mengembalikan status code 503 (Service Unavailable) jika permintaan melebihi batas. Kamu bisa mengubahnya dengan limit_req_status.

http {
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
    limit_req_status 429;
}

Dengan konfigurasi di atas, status code yang dikembalikan adalah 429 (Too Many Requests).

7. Menggunakan Variabel Lain untuk Pembatasan

Selain alamat IP, kamu bisa menggunakan variabel lain untuk pembatasan, seperti $server_name atau $request_uri.

http {
    limit_req_zone $request_uri zone=by_uri:10m rate=10r/s;
}

8. Tips dan Trik

Dengan mengikuti langkah-langkah di atas, kamu bisa dengan mudah mengimplementasikan rate limiting di NGINX untuk melindungi server dan memastikan pengalaman pengguna yang lebih baik.

#Nginx #Tutorial