NGINX-不正使用を防ぐためにリクエストを調整する


28

私がこれをしたいのは、ユーザーがJavaScriptを使用してAPIに対して開発を行い、一部の開発者が台無しになり、訪問者がAJAXリクエストでサーバーをバタンとさせるからです。これが発生した場合、APIリクエストを1分あたりおそらく50リクエストに抑えることができるようにしたいのです。

注:(特にDBを集中的に使用するリソースです。サーバー全体ではなく、おそらくパスレベルです(たとえば、 "/ static /"ではなく、 "/ json_api /"を調整します)。

回答:


36

これは、NginxでLimitReqModuleを使用して実行できます。ただし、これがリバースプロキシ用の場合は、HAProxyでサポートされている新しいレート制限を試してください。

nginxのレート制限は、希望する正確なレートを取得するために少し混乱することがわかりました。

しかし、基本的に次のようなものがあります。

limit_req_zone  $binary_remote_addr  zone=default:10m   rate=50r/m;

httpセクションと、その後に次のようなものlocation内のセクションserverセクション:

limit_req zone=default burst=10 nodelay;

/staticあなたが特定のセクションにそれを持たないようにするために、それを別のlocationものにし、limit_reqディレクティブ(または逆)を含めないようにします。


ありがとう。それらが何をしているのか(ゾーン、バースト、ノードレイ)を説明できますか?そして、zone=limit_req_zone代わりにを付けるつもりでしたか?
orokusaki

正直なところ、私はそれらをうまく説明できないので、混乱するだけだと思います。私が提供したリンクでのマイケルの説明は、それが実行可能であるように聞こえます。あなたの2番目の質問に関する限り、タイプミスはないと思います...私がリンクしたモジュールのドキュメントには役立つかもしれない例があります。
カイルブラント

2
zone、burst、nodelayは、レート制限モジュールに関するNginx wikiページに文書化されています。既に上記の回答からリンクされています。
マークストスバーグ

カイル、場所ごとのレート制限を別のトリガー(たとえば、Authorization-Header)と組み合わせる方法があるかどうか知っていますか。私の場合、特定のユーザーのレートを調整したい場合があります。
ニルス

1
@Nils AFAICSでは、$http_authorization変数を使用して、キーがIPアドレスではなくヘッダーなどの新しいゾーンを定義することができます。つまり、ユーザーごとのレート制限を行う場所セクションでゾーンをlimit_req_zone $http_authorization zone = per_user : 10m rate = 5r/s使用per_userできます。テストされていないので、ドキュメントとnginx変数のリストを読むだけです。これを試してみてください。
idrarig 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.