1

ユーザーがapache2リバースプロキシを介してトンネリングされたファイルをダウンロードするWebサービスがあります。

mod 書き換えと P フラグを書き換えマップと組み合わせて使用​​しています。

基本的には次のようになります。

<Location /my-identifier>
    RewriteEngine on
    RewriteRule /my-identifier/(.*) ${my-rewrite-map:$1} [P]
</Location>

mod_bandwidth などを使用して、サーバーごとに 1 つの接続または 1 つの IP アドレスの帯域幅を制限できることを知っています。

ただし、制限を特定のユーザー (つまり、多くのトラフィックを作成し、公正な使用量を超えたユーザー) に対してのみ有効にしたいと考えています。

また、複数のサーバーにまたがりたいと思っています。

それが役立つ場合は、カスタム環境変数を設定することは可能です (エンコードできる URL を完全に制御し、書き換えルールを使用して設定できます)。

基本的に私が望むのは、たとえば、使用する接続の数や接続するサーバーの数に関係なく、制限に達したユーザーが 5 mbps の速度しか得られないことです。

それはどういうわけか可能ですか?モジュールはありますか?

私の考えは、サーバーがIPごとのトラフィック統計を報告する集中型データストアです。おそらくある種の RRD データ構造です。次に、指定された時間間隔 (たとえば、最後の 60 秒) で IP のトラフィックを選択し、それに応じてスロットル係数を適用できます。

しかし、私はこれをすべて自分でやりたいとは思っていません。できますが、数か月かかるでしょう...また、Apacheに縛られていません。私は同じことのためにNginxサーバーも使用しています.Nginxに何かあれば、それに切り替えることができます!

4

1 に答える 1

1

Apacheについてはわかりませんが、Nginxをタグに挙げてくださっていたので、以下のようなアプローチはいかがでしょうか?

Nginx を Apache サーバーまたは Web サービスへのリバース プロキシとして設定し、多かれ少なかれ次の設定を行います。

upstream serverlist {
  server www1.example.com;
  server www2.example.com;
  server www3.example.com;
}

location / {
  proxy_pass http://serverlist;
}

あなたが持っている「全体的な接続」の要件は、直接マッピングすることはできませんが、次のディレクティブを location ブロックに追加することで、必要なものにかなり近づけることができます。

  • limit_rateこれは接続ごとです
  • limit_conこれにより、接続数を制限できます
  • limit_reqこれにより、1 秒あたりのリクエスト数と許容バースト数を制限できます
  • limit_zoneは制限のゾーンを設定します

更新: IP ごとの全体的なレートを制限するサードパーティの Nginx モジュールがここにあります。

于 2012-08-18T10:00:07.317 に答える