http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
http://nginx.org/en/docs/http/ngx_http_limit_req_module.html#limit_req_zone
Requests with an empty key value are not accounted.
マニュアルに上記のような記述があり、
の値が空の場合は、流量制御が適用されない、と書かれているわけです。
つまり、何らかの条件に基づいてを空にするような実装を施せばよいので、
下記のような実装によって実現可能です。geo $limit { default 1; 10.0.0.0/8 0; 192.168.0.0/24 0; x.x.x.x/32 0; } map $limit $limit_req_key { 0 ""; 1 $binary_remote_addr; } limit_req_zone key_all zone=z_all:50m rate=300r/s; limit_req_zone key_sales zone=z_sales:50m rate=100r/s; limit_req_zone $limit_req_key zone=z_peruser:10m rate=1r/s; : location / { location /sales/ { limit_req zone=z_all burst=2000; limit_req zone=z_sales burst=2000; limit_req zone=z_peruser burst=5; proxy_pass http://192.168.0.110; } limit_req zone=z_all burst=2000; limit_req zone=z_peruser burst=5; proxy_pass http://192.168.0.110; }IPアドレスによって$limitに 0 or 1 を設定し、
$limitが 1 の場合は$limit_req_keyにIPアドレスを設定しています。
これにより、ユーザごとのアクセス制御と流量制御のホワイトリストを実現しています。
Nginxでリクエスト数を制限する方法 | ah-2.com
Nginxでのアクセス流量制御を検証してみた - Qiita
いまさらNginxでDoS攻撃対策してみる(3つの対応してみた) - Qiita
注意点としては、上記は .php (ページ)に対して制限を有効にしていますが、これを全体に対して制限をかけてしまうと、画像やCSSファイルなどあらゆる静的ファイルに対してアクセスが来るのが普通なのですぐに制限にかかってしまいます
【Nginx】DoS対策_limit_req_zone – すこぶる.net 2021 ★
ELB
http { set_real_ip_from 10.0.0.0/8; real_ip_header X-Forwarded-For; }