httpブロック内:
limit_req_zone $binary_remote_addr
zone=login_per_ip:10m
rate=10r/m;
limit_req_zone $binary_remote_addr
zone=general_per_ip:20m
rate=10r/s;
ログイン画面:
location = /account/login/ {
limit_req zone=login_per_ip burst=5 nodelay;
limit_req_status 429;
proxy_pass http://django_backend;
}
一般画面:
location / {
limit_req zone=general_per_ip burst=20 nodelay;
proxy_pass http://django_backend;
}
Nginxのlimit_reqは、指定したキーごとのリクエスト速度をleaky bucket方式で制御します。burstを超えたリクエストは拒否されます。初回導入時はlimit_req_dry_run on;を使い、実際には遮断せずログだけを確認すると安全です。