NGINXのレート制限は、サーバーのリソースを保護し、悪意のあるリクエストや過剰なトラフィックによるサービスの影響を防ぐために使用される機能です。以下は、NGINXのレート制限の主な特徴です:
1. リクエストのレート制限
- 特定の条件に基づいてリクエスト数を制限します。たとえば、IPアドレスごとに1秒あたりのリクエスト数を制限するなどが可能です。
-
limit_req_zone
ディレクティブを使って、リクエストレートを設定します。limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
-
$binary_remote_addr
: クライアントIPをキーとして使用。 -
zone=one:10m
: 制限のための共有メモリゾーンを定義。 -
rate=1r/s
: 1秒あたり1リクエストを許可。
-
2. バーストの許容
- バースト(突発的なリクエストの増加)を許容する設定が可能です。
- バーストの値を指定することで、一時的な超過を許容しつつ、平滑化された処理が行われます。
limit_req zone=one burst=5;
- この例では、最大5件のリクエストを許容しますが、それを超えるとリクエストは制限されます。
3. 遅延処理(Delay)
- バーストが許容される範囲内で遅延をかけることも可能です。
limit_req zone=one burst=5 delay=3;
- 遅延設定により、リクエストがスムーズに処理され、突然のトラフィック増加による影響を軽減できます。
4. 帯域幅の制限
- レート制限だけでなく、帯域幅(転送速度)の制限も可能です。
-
limit_rate
ディレクティブを使用します。location /downloads/ { limit_rate 50k; # 50KB/sに制限 }
5. HTTPレスポンスコードで通知
- 制限を超えたリクエストには、デフォルトでHTTP 503(Service Temporarily Unavailable)を返します。
-
limit_req_status
ディレクティブでカスタムステータスコードを設定できます。limit_req_status 429; # Too Many Requests
6. 複数ゾーンの設定
- 複数のゾーンを作成して、異なる条件でレート制限を適用することが可能です。
limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=5r/s; limit_req_zone $server_name zone=server_limit:10m rate=10r/s;
7. 動的条件の適用
-
$binary_remote_addr
や$server_name
などの変数を利用して、動的に条件を定義できます。 - IPアドレスやリファラーヘッダー、特定のURLパスごとに異なる制限を適用できます。
8. 使いやすい拡張性
- NGINX Plusでは、ダッシュボードを使ってリアルタイムで制限状況を監視したり、より詳細なカスタマイズが可能です。
注意点
- レート制限を過剰に設定すると、正当なユーザーの利用が妨げられる場合があります。
- 適切なリクエストレートやバースト値を設定するには、アプリケーションやトラフィックパターンを十分に理解する必要があります。
NGINXのレート制限は、柔軟性と高いパフォーマンスを提供し、セキュリティと安定性を強化する重要な機能です。