空のバケット
最も単純な電流制限設定から始めます: クライアント IP 制限フローの
limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=10r/s; server { location /login/ { limit_req zone=ip_limit; proxy_pass http://login_upstream; } }
$binary_remote_addr。
zone=ip_limit:10m 電流制限ルールの名前は ip_limit で、10MB のメモリ空間を使用して IP に対応する電流制限ステータスを記録できます。
#burst
limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=10r/s; server { location /login/ { limit_req zone=ip_limit burst=12; proxy_pass http://login_upstream; } }
nolay
limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=10r/s; server { location /login/ { limit_req zone=ip_limit burst=12 nodelay; proxy_pass http://login_upstream; } }
#すぐに実行されるか、拒否されます。スロットルによってリクエストが遅延することはなくなります。
リクエストはバケットから一定の割合で漏れ出し、バケットのスペースは固定されているため、最終的には平均して 1 秒あたり 5 件のリクエストが実行され、電流制限の目的は達成されます。
しかし、これには欠点もあり、電流制限は制限されていますが、制限はそれほど均一ではありません。上記の構成を例にとると、同時に 12 個のリクエストが到着した場合、これらの 12 個のリクエストはすぐに実行でき、後続のリクエストは一定の速度でのみバケットに入力され、100 ミリ秒ごとに 1 つのリクエストが実行されます。一定期間リクエストがなく、バケットが空の場合、12 個の同時リクエストが同時に実行される可能性があります。
ほとんどの場合、この不均一な流量は大きな問題ではありません。ただし、nginx には、同時実行を制御するためのパラメータ (nolay リクエストの数) も用意されています。
limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=10r/s; server { location /login/ { limit_req zone=ip_limit burst=12 delay=4; proxy_pass http://login_upstream; } }
delay=4 バケット内の 5 番目のリクエストから遅延を開始します
このように、遅延パラメータの値を制御することで、許可される同時実行を調整できます リクエストの数はリクエストを均等にしますが、リソースを消費する一部のサービスではこの数を制御する必要があります。
以上がNginxの電流制限を設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。