Sebaiknya hindari penggunaan arahan "jika". Ketika kunci di limit_req_zone (dan limit_conn_zone) kosong, batas tidak diterapkan. Anda dapat menggunakan ini bersama dengan modul peta dan geo untuk membuat daftar putih IPs di mana batas throttle tidak diterapkan.
Contoh ini menunjukkan cara mengonfigurasi batas untuk permintaan bersamaan dan tingkat permintaan dari satu IP.
http {
geo $whitelist {
default 0;
# CIDR in the list below are not limited
1.2.3.0/24 1;
9.10.11.12/32 1;
127.0.0.1/32 1;
}
map $whitelist $limit {
0 $binary_remote_addr;
1 "";
}
# The directives below limit concurrent connections from a
# non-whitelisted IP address to five
limit_conn_zone $limit zone=connlimit:10m;
limit_conn connlimit 5;
limit_conn_log_level warn; # logging level when threshold exceeded
limit_conn_status 503; # the error code to return
# The code below limits the number requests from a non-whitelisted IP
# to one every two seconds with up to 3 requests per IP delayed
# until the average time between responses reaches the threshold.
# Further requests over and above this limit will result
# in an immediate 503 error.
limit_req_zone $limit zone=one:10m rate=30r/m;
limit_req zone=one burst=3;
limit_req_log_level warn;
limit_req_status 503;
Arahan zona harus ditempatkan di tingkat http, namun arahan lain dapat ditempatkan lebih jauh ke bawah, misalnya di server atau tingkat lokasi untuk membatasi ruang lingkup mereka atau lebih lanjut menyesuaikan batas.
Untuk informasi lebih lanjut lihat dokumentasi Nginx ngx_http_limit_req_module dan ngx_http_limit_conn_module