1

nginx (http://nginx.org/) を使用して、1 分あたりのリクエスト数を制限しようとしました。たとえば、私の設定は次のとおりです。

server{
limit_req_zone $binary_remote_addr zone=pw:5m rate=20r/m; 
}
location{
limit_req zone=pw nodelay;
}

私が Nginx で見つけたのは、1 分間に 1 つのリクエストを試行しても、その 1 分間に何度も戻ることができるということです。もちろん、ページをすばやく更新すると、「503 Service Temporarily Unavailable」というリターン コードである制限ページ メッセージが表示されます。

リクエストを 1 分間に正確に 20 リクエストに制限するために適用できる設定の種類を知りたいです。Nginxがこれを提供するため、フラッド保護だけを探しているわけではありません。たとえば、ページが常に更新される場合、ユーザーを制限し、しばらくしてからユーザーを元に戻すことができます(ノードレイ設定を適用しない限り)。

HAProxy 以外の Nginx に代わるものがある場合 (非常に遅いため)。また、Nginx でのセットアップは、実際のサイトへのリバース プロキシとして機能しています。

4

1 に答える 1

5

2つのことがあります:

  1. limit_conn ディレクティブを limit_conn_zone と組み合わせて使用​​すると、IP からの (同時) 接続の数を制限できます ( http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html#limit_connを参照) 。
  2. limit_req ディレクティブを limit_req_zone と組み合わせて使用​​すると、時間単位ごとに特定の IP からのリクエスト数を制限できます ( http://nginx.org/en/docs/http/ngx_http_limit_req_module.html#limit_reqを参照) 。

ノート:

  • サーバーブロックではなくhttpブロックでlimit_conn_zone/limit_req_zoneを実行する必要があります
  • 次に、server/location ブロック内から http ブロックで設定したゾーン名を、(適切な) limit_con/limit_req 設定の etup ゾーンで参照します。

以下で述べたように、リクエストを制限しようとしているので、 limit_req ディレクティブが必要です。具体的には、1 分あたり最大 5 つのリクエストを取得するには、次を追加してみてください。

http {
  limit_req_zone $binary_remote_addr zone=example:10m rate=5r/m;
}

server {
   limit_req zone=example burst=0 nodelay;
}

注:明らかにそれらを既存のhttp/serverブロックに追加してください

于 2012-09-17T10:26:51.447 に答える