Cara Skip IP di Express Rate Limit: Panduan Implementasi

Implementasi Skip IP pada express-rate-limit

Untuk mengecualikan alamat IP tertentu dari pembatasan laju (rate limiting) pada aplikasi Node.js menggunakan paket express-rate-limit, Anda harus memanfaatkan opsi konfigurasi skip. Fungsi ini menerima objek req (request) dan mengembalikan nilai boolean (true untuk melewati limit, false untuk menerapkan limit).

Contoh Implementasi Kode

Berikut adalah cara mengimplementasikan fungsi skip untuk mem-bypass IP lokal atau IP internal tertentu:

const rateLimit = require('express-rate-limit');

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 menit
  max: 100, // limit per IP
  skip: (req, res) => {
    // Contoh: Skip jika IP adalah localhost atau IP internal tertentu
    const allowedIps = ['127.0.0.1', '192.168.1.50'];
    return allowedIps.includes(req.ip);
  }
});

app.use(limiter);

Tabel Parameter Konfigurasi Skip

ParameterTipe DataDeskripsi
skipFunctionFungsi callback (req, res) yang mengembalikan boolean.
req.ipStringAlamat IP pengirim yang terdeteksi oleh Express.
req.headersObjectDapat digunakan untuk bypass berdasarkan API Key atau Header.

Strategi Bypass Berdasarkan Header

Dalam lingkungan produksi yang menggunakan Load Balancer atau Reverse Proxy (seperti Nginx atau Cloudflare), req.ip mungkin tidak akurat. Pastikan app.set('trust proxy', 1) telah diaktifkan. Anda juga dapat melakukan skip berdasarkan header khusus untuk kebutuhan internal:

skip: (req) => {
  return req.headers['x-bypass-secret'] === 'rahasia-internal-anda';
}

Troubleshooting Umum

  • Trust Proxy: Jika req.ip selalu bernilai ::1 atau IP proxy, pastikan app.set('trust proxy', 1) sudah dipasang sebelum middleware rate limit.
  • Urutan Middleware: Pastikan middleware express-rate-limit diletakkan setelah middleware yang memproses header atau autentikasi jika Anda melakukan skip berdasarkan header.
  • IPv6 vs IPv4: Pastikan format IP yang dimasukkan ke dalam array allowedIps sesuai dengan format yang diterima oleh server (misal: ::ffff:127.0.0.1).