Nginx · 1 min read · Jan 23, 2026
nginxによるレート制限
この記事では、nginxのHttpLimitReqModuleを使用して、特定のセッションのリクエスト数を制限する方法を説明します。これは、例えば、ボットによって1秒あたり複数のリクエストが送信され、サーバーの負荷が増加する場合に役立ちます。ngx_http_limit_req_moduleを使用すると、レート制限を定義でき、訪問者がこのレートを超えると503エラーが返されます。
1 HttpLimitReqModuleの使用 (ngx_http_limit_req_module)
nginx.confを開きます…
nano /etc/nginx/nginx.conf…セッション状態が保存されるエリアを定義します - これはhttp {}コンテナ内に配置する必要があります:
http {
[...]
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
[...]
}このエリアはoneと呼ばれ、10MBのストレージが割り当てられます。変数$remote_addrの代わりに、状態のサイズを64バイトに減らす$binary_remote_addr変数を使用します。1MBのゾーンには約16,000の状態が存在できるため、10MBでは約160,000の状態が許可されるので、訪問者には十分です。レートは1秒あたり1リクエストに制限されています。ここでは整数値を使用する必要があるため、1秒あたり0.5リクエストに制限したい場合は、30r/m(1分あたり30リクエスト)を使用します。
この制限を機能させるために、limit_reqディレクティブを使用します。このディレクティブはhttp {}、server {}、およびlocation {}コンテナで使用できますが、私の意見では、リクエストをアプリサーバー(PHP-FPM、mongrelなど)に渡すlocation {}コンテナで最も便利です。なぜなら、画像、CSS、JavaScriptファイルが多数含まれる単一のページを読み込むと、単一のページリクエストで指定されたレート制限を超える可能性があるからです。
それでは、これをlocation ~ .php$ {}コンテナに入れましょう:
[...]
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
limit_req zone=one burst=5;
}
[...]limit_req zone=one burst=5;は、このレート制限が前に定義したセッションストレージエリアに属することを指定します(zone=oneのため)。これはレート制限が1r/sであることを意味します。バーストの意味は、ある種のキューのようなものだと考えることができます。これは、レート制限を超えた場合、次のリクエストが遅延し、バーストパラメータで指定された数よりも多くのリクエストがキューに待機している場合にのみ、503エラーが返されることを意味します(例: こうなります:

)。
このキューを使用したくない場合(つまり、誰かがレート制限を超えた場合にすぐに503を返す場合)、nodelayオプションを使用する必要があります:
[...]
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
limit_req zone=one burst=5 nodelay;
}
[...]変更を有効にするためにnginxを再読み込みするのを忘れないでください:
service nginx reload2 リンク
- nginx: http://nginx.net/
- HttpLimitReqModule: http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
著者について
ファルコ・ティメは、Timme Hosting(超高速nginxウェブホスティング)のオーナーです。彼はHowtoForgeのリードメンテイナー(2005年から)であり、ISPConfigのコア開発者の一人(2000年から)でもあります。彼はまた、O’Reillyの書籍「Linux System Administration」にも貢献しています。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。