【PR】本記事はアフィリエイト広告を利用しています。
nginx.confに設定を入れる
に記述されていたのでそれを参考にしました。
nginx.conf
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
...
server {
...
location /search/ {
limit_req zone=one burst=5;
}一寸私には聞きなれない制限は、「リーキー バケット(leaky bucket)」方式を使用というものを使用してるそうで、一般には分かりにくいかなと思います。
ようするに「バケツから漏れてる方式」で、バケツの底にN個の穴が空いててそこに水をいれると一定の速度で水が漏れる様を指しているということです。
アルゴリズム的な言い回しだと「平準化」といいます。
私もソケットを使用したネットワークプログラミングには参加していたのですが、このアルゴリズムについては知りませんでした。
AIが生成した絵だとなんか変ですが(笑)イメージ的にはこんな感じです。
水が「パケット」で、そこにある一定量しか溜めることができずそれ以上注ぐと溢れて処理しない。
処理するデータは設定した秒速で処理する。
ということになります。
上の設定例だと、「/serach」に対して同一のIPアドレスからのリクエストに制限をかけ、
一秒間に最大5バースト分処理をする、ということになります。
リクエストは定義された速度で処理されるようにわざと遅延処理を入れます。
過剰なリクエストがくると、最大バーストサイズ分を超えるとリクエストはエラーとして強制的に終了
させる、というものです。
過剰なリクエストを遅延処理をいれたくない場合は「nodelay」をいれろと書いてます。
詳しい説明は、をみてください。
難しいのはホームページなどにイメージが沢山貼り付けてありそれを取り込もうとするとエラーになる可能性があるので、環境に合わせて適切にいれる必要があります。
nginx実践入門 (WEB+DB press plusシリーズ) [ 久保達彦 ] 価格:3047円 |
余談ですが、対策コードをいれている関係上このサイトのイメージなどのレスポンスが悪いと思います。
すみませんがご理解ください。