ホームページ  >  記事  >  運用・保守  >  Nginx を使用してリクエストレート制限とフロー制御を行う方法

Nginx を使用してリクエストレート制限とフロー制御を行う方法

PHPz
PHPzオリジナル
2023-08-03 23:42:221624ブラウズ

Nginx をリクエスト レート制限とフロー制御に使用する方法

Nginx は、高性能および高い同時処理能力を備えた軽量の Web サーバーおよびプロキシ サーバーであり、大規模な分散システムの構築に適しています。実際のアプリケーションでは、サーバーの安定性を確保するために、リクエストのレートとフローを制限する必要があることがよくあります。この記事では、Nginx を使用してリクエスト レート制限とフロー制御を行う方法を紹介し、コード例を示します。

  1. リクエスト レート制限

リクエスト レート制限とは、各クライアントが一定期間内に開始できるリクエストの数を制限することを指します。これにより、クライアントがサーバーに頻繁に要求し、サーバー リソースが過度に消費されるのを防ぐことができます。

まず、次のコードを Nginx 構成ファイルに追加します。

http {
    # 定义限速区域,以client IP为准
    limit_req_zone $binary_remote_addr zone=limit:10m rate=10r/s;
    
    server {
        listen 80;
        
        # 使用limit_req模块限制请求速率
        location / {
            limit_req zone=limit burst=20;
            proxy_pass http://backend;
        }
    }
}

上記の構成では、各クライアントが 1 秒間に最大 10 件のリクエストを開始するように制限され、制限を超えるリクエストは無効になります。遅れましたので対処します。

  1. フロー制御

フロー制御とは、サーバーの負荷を最適化し、ユーザー エクスペリエンスを向上させるために、Nginx を介してリクエストをスケジュールおよびオフロードすることを指します。サーバー リソースを合理的に割り当てることで、さまざまな種類のリクエストを適切に処理できるようになります。

以下はフロー制御のサンプル コードです:

http {
    # 定义后端服务器
    upstream backend {
        server backend1;
        server backend2;
    }
    
    server {
        listen 80;
        
        location /api/ {
            # 根据请求路径进行分流
            if ($request_uri ~* "^/api/v1/") {
                proxy_pass http://backend1;
            }
            if ($request_uri ~* "^/api/v2/") {
                proxy_pass http://backend2;
            }
        }
        
        location / {
            # 静态文件请求走本地硬盘
            try_files $uri $uri/ =404;
        }
    }
}

上記の構成は、要求されたパスに基づいてバックエンド サーバーにトラフィックを選択的に転送します。たとえば、/api/v1/ で始まるリクエストは backend1 サーバーに転送され、/api/v2/ で始まるリクエストは backend2 サーバーに転送されます。

Nginx の他のモジュールと組み合わせて、HTTP アクセス頻度、ユーザー IP、Cookie によるトラフィックのきめ細かな制御など、実際のニーズに応じてより複雑なトラフィック制御を実行できます。

概要:

上記の例を通じて、リクエスト レート制限とフロー制御に Nginx を使用する方法を学びました。リクエスト レート制限により、悪意のあるリクエストがサーバーに過剰な圧力をかけることを防ぐことができ、フロー制御により、さまざまなニーズに応じてサーバー リソースを合理的に割り当て、ユーザー エクスペリエンスを向上させることができます。 Nginx を適切に構成することで、サーバーの安定性とパフォーマンスをより確実に確保できます。

以上がNginx を使用してリクエストレート制限とフロー制御を行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。