Saya melihat ke pembatasan tingkat menggunakan HttpLimitReqModule nginx . Namun, semua permintaan berasal dari IP yang sama (loadbalancer), dengan alamat IP asli di header.
Apakah ada cara untuk memiliki nginx rate-limit berdasarkan ip di X-Forwarded-For
header bukan ip sumber?
nginx
rate-limiting
John Brodie
sumber
sumber
$binary_remote_addr
variabel akan diatur dengan benar.The
limit_req_zone
direktif mendefinisikan variabel yang akan digunakan sebagai kunci untuk permintaan pengelompokan.Biasanya,
$binary_remote_addr
ini digunakan bukan$remote_addr
karena lebih kecil dan menghemat ruang.Mungkin Anda juga ingin menggunakan RealipModule .
Ini akan menulis ulang variabel alamat jarak jauh ke alamat yang disediakan di header khusus dan juga akan membuat pencatatan dan penggunaan variabel lainnya lebih mudah.
sumber
$binary_remote_addr
dan$remote_addr
diatur ke nilai header yang Anda konfigurasikan, biasanyaX-Forwarded-For
- jadi variabel standar Anda sekarang adalah "alamat IP klien nyata". Jalankannginx -V
untuk melihat apakah NGINX dibangun dengan--with-http_realip
. Kemudian konfigurasi sesederhanaset_real_ip_from 10.0.0.0/8;
real_ip_header X-Forwarded-For;
:, di mana rentang CIDR adalah penyeimbang beban hulu Anda yang mengaturX-Forwarder-For
header.