Nginx 制限リクエスト レート構成を実装する方法
Nginx は、構成を通じてリクエストを制限および制御できる高性能 Web サーバーです。実際のアプリケーションでは、サーバー リソースを保護するために、リクエスト レートを制限することが必要になることがよくあります。この記事では、Nginxでリクエストレート制限を実装する方法を紹介します。
1. HttpLimitReqModule モジュールを使用する
Nginx は、リクエスト レートを制限するために使用できる HttpLimitReqModule モジュールを提供します。構成を開始する前に、HttpLimitReqModule モジュールがインストールされていることを確認する必要があります。
Nginx 構成ファイル (通常は /etc/nginx/nginx.conf にあります) を開き、http セクションを見つけて、次の構成を追加します。 :
http { ... limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { ... } }
limit_req_zone は、制限された領域の名前とサイズを定義するために使用され、$binary_remote_addr は、クライアントの IP アドレスを制限されたキーワードとして使用することを示します。 zone=one:10m は、サイズが 10MB の one という名前の制限領域を使用することを意味します。 rate=1r/s は、リクエスト レートが 1 秒あたり 1 に制限されることを意味します。
リクエスト制限が必要な場合は、limit_req ディレクティブを追加してリクエスト レートを制限します。たとえば、リクエスト レートを 10 リクエスト/秒に制限するには、サーバー セグメントに次の設定を追加できます。
location / { limit_req zone=one burst=5; ... }
limit_req ディレクティブを使用してリクエスト制限を適用し、zone パラメータでリクエストの名前を指定します。使用される制限ゾーン、およびバースト パラメータで同時に指定される時間、処理された要求の数。上記の設定は、リクエスト数が 10/秒を超えると 503 エラーが返されることを示しています。
構成が完了したら、Nginx 構成を再ロードして有効にする必要があります。次のコマンドを使用して構成を確認して再ロードできます:
$ nginx -t # 检查配置是否正确 $ nginx -s reload # 重新加载配置
2. ngx_http_limit_req_module モジュールを使用します
HttpLimitReqModule モジュールに加えて、ngx_http_limit_req_module モジュールを使用してリクエストを制限することもできますレート。このモジュールは、より柔軟な構成オプションを提供します。
Nginx 構成ファイルを開き、http セグメントを見つけて、次の構成を追加します:
http { ... limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { ... } }
この構成はHttpLimitReqModule モジュールと同様に、1 という名前の制限領域が定義されており、サイズは 10MB、要求レート制限は 1/秒です。
リクエスト制限が必要な場合は、limit_req ディレクティブを追加してリクエスト レートを制限します。たとえば、リクエスト レートを 10 リクエスト/秒に制限するには、サーバー セグメントに次の設定を追加できます。
location / { limit_req zone=one burst=5; ... }
limit_req ディレクティブを使用してリクエスト制限を適用し、zone パラメータでリクエストの名前を指定します。使用される制限ゾーン、およびバースト パラメータで同時に指定される時間、処理された要求の数。
構成が完了したら、Nginx 構成を再ロードして有効にする必要があります。次のコマンドを使用して、構成を確認して再ロードできます。 。
$ nginx -t # 检查配置是否正确 $ nginx -s reload # 重新加载配置
3. lua スクリプトを使用してリクエスト制限を拡張する
Nginx は、lua スクリプトを使用してリクエスト制限を拡張することもサポートしています。カスタム Lua スクリプトを作成することにより、より柔軟で複雑なリクエスト制限戦略を実装できます。
まず、Nginx lua モジュールがインストールされていることを確認する必要があります。
Nginx 構成ファイルに次の構成を追加します:
http { ... lua_shared_dict limit_req_store 10m; server { ... location / { access_by_lua_block { local limit_req = require "resty.limit.req" local lim, err = limit_req.new("limit_req_store", 1, 1) if not lim then ngx.log(ngx.ERR, "failed to instantiate a resty.limit.req object: ", err) return ngx.exit(500) end local key = ngx.var.binary_remote_addr local delay, err = lim:incoming(key, true) if not delay then if err == "rejected" then return ngx.exit(503) end ngx.log(ngx.ERR, "failed to limit req: ", err) return ngx.exit(500) end if delay >= 0.001 then ngx.sleep(delay) end } ... } } }
この構成では、lua_shared_dict ディレクティブを使用して、limit_req_store Shared を定義します。メモリ領域、サイズは10MBです。
構成が完了したら、Nginx 構成をリロードして有効にします。
4. 概要
この記事では、Nginx リクエスト レート制限を実装する 3 つの方法、つまり HttpLimitReqModule モジュール、ngx_http_limit_req_module モジュール、lua スクリプトを使用する方法を紹介します。適切な構成と制限ポリシーにより、サーバー リソースを効果的に保護し、悪意のあるリクエストによってサーバーに過剰な負荷がかかるのを防ぐことができます。実際のアプリケーションでは、特定のニーズに応じて、適切な方法を選択してリクエスト レートを制限できます。
以上がNginx 制限リクエストレート構成を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。