【nginx】レート制限
table:option
delay=9 スロットリングを行わずに前もって何回リクエストを行うことができるかの定義
nodelay burst 分まで一気に処理を受け付けて、溢れたらエラーを返す
rate=3r/s 1 秒ごとに 3 リクエスト分の受付可能数を空けるのではない
1/3 秒に 1 リクエストだけ空ける
特定 IP などによる接続数の制限
code:nginx
http {
limit_conn_zone $binary_remote_addr zone=limitbyaddr:10m;
limit_conn_status 429;
server {
(snip)
limit_conn limitbyaddr 40;
(snip)
}
}
同一ネットワーク内からのアクセスの場合には適切な遮断ができないので注意が必要
特定 IP などによるリクエスト数の制限
code:nginx
http {
limit_req_zone $binary_remote_addr zone=limitbyaddr:10m rate=3r/s;
limit_req_status 429;
server {
(snip)
limit_req zone=limitbyaddr;
(snip)
}
}
2 段階のレート制限
code:nginx
server {
location / {
limit_req zone=limitbyaddr burst=12 delay=9;
}
}
burst
指定された数のアクセスまで待ち時間をつけて成功させる
例 : rate=3r/s, burst=12
毎秒 3 リクエストを超えるアクセスがあった場合、12 リクエストまでは毎秒 3 リクエストになるように待ち時間を入れてアクセスを成功させ、それ以上はエラーを返す
帯域制限
code:nginx
location /download/ {
limit_rate_after 10m;
limit_rate 1m;
}
10 MB 後に 1 秒あたり 1 MB のレートに制限
帯域幅の制限は接続ごとの設定