0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【不正アクセス対策】NGINXのレート制限機能「limit_req_zone」

Posted at

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のレート制限は、柔軟性と高いパフォーマンスを提供し、セキュリティと安定性を強化する重要な機能です。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?