Nginxでリクエスト数を制限する方法
Nginxで特定のURLのアクセス数を制限したかったので、設定しました。
Nginxで特定のPHPのアクセス数を絞る設定
nginx.confやVirtualHostの設定中で次の定義を行います。
limit_req_zone
で定義を作る(ここは定義するだけ)
# limit req
limit_req_zone $binary_remote_addr zone=limit_req:10m rate=20r/m;
limit_req_log_level error;
limit_req_status 503;
-
limit_req
というzoneを定義。 -
remote_addr毎に、1分間に20リクエストまでに制限する。
-
$binary_remote_addr
はremote_addrの4バイト表現。 -
rate=20r/m
は20request per minute.
limit_req
で制限する
location文でlimit_reqを記述し、先に宣言したlimit_req_zone定義を利用する。
location /search/ {
limit_req zone=limit_req burst=2;
}
-
このlocationで
limit_req
を発動する。 -
burst=2は制限に達したリクエストを遅延させる個数設定。 この数以上の制限オーバーリクエストはエラーになる。