apache で帯域制限をかける(mod_bw モジュールを使ってみた)
apache で帯域制限をかけるモジュールは、いろいろありますが、使い勝手の良いものとして mod_bw があります。
この mod_bw モジュールは、
apache でPseudo streaming(疑似ストリーミング)で動画配信を行ってみる( mod_flvx,mod_h264_streaming モジュールを使ってみた) でも最後の方で、少しだけ紹介していますが、
大きなファイルをやたらとダウンロードされたり、DoS攻撃など大量のトラフィックに制限かけるための一つの手段として用いられています。
今回は、そのmod_bw モジュールを使ってみたいと思います。
帯域制限(Bandwidth)とは、
ネットワークの世界では、送受信データ量を制限するという意味でよく使われています。
そもそも 帯域幅(Bandwidth) というのは、文字通り周波数の範囲を指し、ネットワークの世界観のデータ通信幅的な意味とは、ちょっと異なります。
ただ、その語源は、この周波数が情報伝達能力に非常に関与しているために通信伝達能力を帯域幅などと代名詞のように使われているのが現状です。
mod_bw モジュールを使ってみた
mod_bw モジュールをインストールする
apache の設定ファイル を編集する
apxs コマンドでインストールした時点で、/etc/httpd/conf/httpd.conf には、以下の1行が追加されているはずです。
(もし、見当たらないようなら追加しておきます。パスは、OSによって異なりますので注意してください。)
LoadModule bw_module /usr/lib64/httpd/modules/mod_bw.so
|
ここまでできたら、あとは、各制限の設定を行うだけになります。
以降に簡単な制限のかけ方をいくつか例をあげて解説しておきます。
帯域制限(転送速度制限)を行う
以下の例では、/var/www/html/video ディレクトリへのアクセスは、すべて 100kByte/Sec に制限されます。
...
<Directory "/var/www/html/video">
<IfModule mod_bw.c>
BandWidthModule On
ForceBandWidthModule On
BandWidth all 100000
</IfModule>
</Directory>
...
|
BandWidthModule [On|Off]
mod_bw モジュールを有効にします。
On : 有効
Off : 無効
ForceBandWidthModule [On|Off]
全てのリクエスト処理に対して mod_bw モジュールを有効にします。
On : 有効
Off : 無効
BandWidth [From] [bytes/s]
帯域を指定します。
From : 対象とする接続元を指定します。(省略可:省略時はすべての接続が対象)
ホスト名、IPアドレス、ドメイン名(あるいはドメイン名の一部)、ネットワーク(マスク)を指定することができます。
# ホスト名の例
host.exmaple.com
# IPアドレスの例
192.168.1.32
# ドメイン名の例
exmaple.com
# ネットワーク(マスク)の例
192.168.0.0/24
|
bytes/s : 使用可能な合計速度を Byte/Sec で指定します。0は無制限です。
また、
BandWidthは、以下のようなフォーマットで指定することも可能です。
BandWidth u:[User-Agent] [bytes/s]
接続元をユーザエージェントで指定することができます。
# ユーザエージェント名の先頭に "Mozilla/5" を含むクライアントからのアクセスは、10kByte/Sec に制限されます。
BandWidth "u:^Mozilla/5(.*)" 10240
# ユーザエージェント名が "wget" からのアクセスは、10kByte/Sec に制限されます。
BandWidth "u:wget" 102400
|
大きなファイルだけ帯域制限(転送速度制限)を行う
以下の例では、/var/www/html/video ディレクトリへのアクセスは、大きなファイルだけ 100kByte/Sec に制限されます。
...
<Directory "/var/www/html/video">
<IfModule mod_bw.c>
BandWidthModule On
ForceBandWidthModule On
LargeFileLimit .mp4 500 10240
</IfModule>
</Directory>
...
|
LargeFileLimit [Type] [Minimum Size] [bytes/s]
ファイルによって帯域を指定します。
Type : ファイル種別(拡張子)を指定します。
Minimum Size : 制限をかけるファイルサイズ(kbyte) を指定します。
bytes/s : 使用可能な合計速度を Byte/Sec で指定します。
接続数を制限する
以下の例では、/var/www/html/video ディレクトリへの接続数を 20 に制限しています。
また、このときの帯域制限は、100kByte/Sec に制限されます。
...
<Directory "/var/www/html/video">
<IfModule mod_bw.c>
BandWidthModule On
ForceBandWidthModule On
BandWidth all 10240
MaxConnection all 20
</IfModule>
</Directory>
...
|
MaxConnection [From] [Max]
最大接続数を指定します。
From : 対象とする接続元を指定します。(省略可:省略時はすべての接続が対象)
ホスト名、IPアドレス、ドメイン名(あるいはドメイン名の一部)、ネットワーク(マスク)を指定することができます。
# ホスト名の例
host.exmaple.com
# IPアドレスの例
192.168.1.32
# ドメイン名の例
exmaple.com
# ネットワーク(マスク)の例
192.168.0.0/24
|
Max : 最大接続数を指定します。
MaxConnectionは、
BandWidthとともに使用します。
また、
MaxConnectionの
From と
BandWidth の
From パラメータは同じ値でなければなりません。
上記の例では、いずれも
all を指定していると思います。
この接続数を超えると 503 のHTTPステータスコードが出力されます。Apacheのデフォルト画面は、以下のような感じです。
いかがだったでしょうか?
ここでは、例として
Directory ディレクティブの中で使用しましたが、
mod_bw モジュールは、
VirtualHost ディレクティブでも使用できます。
VirtualHost ディレクティブで使用すれば、その仮想ホスト全体に制限をかけることができます。
...
<Virtualhost *>
Servername www.example.com
...
BandwidthModule On
ForceBandWidthModule On
Bandwidth all 10240
MinBandwidth all -1
...
</Virtualhost>
...
|
などとするこも可能です。
上記の例は、すべてに対して 10kByte/Sec の帯域制限を設けた例です。
この制限を設けることで、サーバーの負荷もある程度セーブできることもあります。
また、使い方を間違えてしまうと、重たいサーバーになってしまうこともありますから、便利な反面、注意して使う必要があろうかと思います。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
関連記事 :
コメントを投稿 :