nginx リクエスト数制限 limit_req

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流量制御(Rate Limit)の活用方法 - Qiita

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;
}

ELB内のngixでDDoS対策 ━━━━━ DROBUNE Weblog 2014