mod_bandwidth 自宅サーバーで公開

Apacheのmod_bandwidthというモジュールを使えば、帯域に制限をかけることができます。今回はそのための設定を紹介します。

トップへお問い合わせ
 
 
 
   
 
 
 

mod_bandwidth 自宅サーバーで公開

Last update 2007/08/25 05:16

 

 

Bフレッツがやってきたで書きましたが、私の自宅にもようやく(?)Bフレッツに契約しました。
正直言うと、普通のテキストサイトを見る分にはほとんどADSLと変わりません。
ただ、動画サイトやファイルのダウンロード等になってくると俄然威力を発揮しますね。

自宅サーバー

自宅サーバーをしてれば、なおさらBフレッツや光ファイバーはおすすめです。
私の場合、ADSLの8Mで契約してたときは、下り3Mbpsで上りが1Mbpsぐらいの速度が出ていました。
一番困ったのが、しょっちゅうルーターがフリーズすること。
私はいくつかのサイトを自宅サーバーで公開しているんですけれど、総アクセス数は1万アクセス/日ぐらいになるんですけれど、どうもアクセスが多すぎてルーターが悲鳴を上げてしまうと。
結構性能がいいルーターを使ってたんですけれど、しょっちゅうフリーズしてたんですね。だいたい1日に1回あるかないかぐらい。
それが光にしてからほとんどフリーズすることが無くなりましたね。

というのも、上がり1Mbpsだとアクセスが多すぎるとリクエストを送信しきれなくて「延滞」が生じてしまうらしい。
それが貯まりすぎると、ルーターがフリーズしてしまうようです。
特にADSLのように、上がりと下りの速度が違う場合は、余計そうした症状が起きるようです。

光回線にした場合、リクエストが余計ひっきりなしに来るからルーターも悲鳴を上げてしまうかな・・・と思ったんですけれど、これがほとんどフリーズを起こさない。
光回線にしてから、10日程経ちましたが今までフリーズしたのは1度きり。
我々自鯖ユーザーにとって一番懸念していることが、ルーターのフリーズ。
それが無くなったことだけでも光にした甲斐があったなぁ。と。

光回線で公開

当然の事ながら、ADSLの時は上り1Mbpsしかでなかったので、私のサイトにアクセスしても非常に重かったはずです。
ところが、今回は計測したところ35Mbpsほどは出るようなので、約35倍の快適さ。

自鯖で動画を公開する

テキストがメインのサイトであれば、ADSLで十分だと思うんですけれど、画像や動画を公開するとなると光回線は必須です。
そして、実際にインターネット上はハイビジョン動画を自鯖で公開している人がいます。

映像には自宅サーバがおすすめ

単に自宅サーバーを公開しているだけでなく、3~5Mbpsという超高画質のハイビジョン動画を配信していらっしゃいます。
しかも、撮影センスがプロ並み(プロ?)!
私のように素人が写した雰囲気とは大違い。(笑)
で、このサイトの動画を見ていて思ったのですが、私の今のBフレッツの環境だと、動画のURLをクリックしてから数秒間が開いて再生され、再生スピードよりダウンロードスピードの方が速いので、以後は一度も停止せずに見ることが出来ます。
速度を見てみると、だいたい3MB/秒(24Mbps)出ているので、自宅サーバーだとハイビジョン動画も余裕で公開できるんだな。と。
どの動画も100MBを超えるものばかりですが、だいたい30秒ちょいでダウンロードできてしまいます。

帯域を制限する

光回線にしても、YouTubeでスムーズに見られなかったり、遅かったりする場合があります。
人気のあるサイトは、非常にアクセスが集中するため動画なんかを配信していると、いくら100Mbpsの余裕があったとしても、数人アクセスするだけで回線がいっぱいになってしまうことがよくあります。
YouTubeなんかは、数万人が同時にアクセスしているでしょうから、配信するときに制限を加えないとすぐに回線がパンクしてしまいます。

そこで今回は、Apacheで帯域の制限をかけることができる、mod_bandwidthというモジュールを使って、一人当たりのダウンロード速度に制限をかけてみましょう。
ただしこのモジュールは、Apache1.3系でないと動作しないようなので、Apache2.0やApache2.2系でサーバーを公開している場合は、実現できません。

mod_bandwidthを導入する

私のサーバーマシンは、OSにVine Linuxを使用していますが、自宅サーバーには最もおすすめです。
以後、Vine Linux 4.1を対象とした設定を記述します。

まず、Vine Linuxではすでにmod_bandwidthが用意してあるので、httpd.confをちょっといじるだけで組み込むことができます。

#LoadModule bandwidth_module   modules/mod_bandwidth.so
                     ↓ 先頭の「 # 」をとってやる
LoadModule bandwidth_module   modules/mod_bandwidth.so
#AddModule mod_bandwidth.c
                     ↓ 先頭の「 # 」をとってやる
AddModule mod_bandwidth.c
# ディレクティブ外のどこでもいいから記述する
# ただし、バーチャルサーバーを使用している場合は
# 制限を加えたいバーチャルサーバーのディレクティブに記述する
BandWidthModule On
# バーチャルサーバーの場合の例

  ServerName hivision.f-tools.net
  BandWidthModule On

制限をかける

制限をかける場合は、制限したいディレクトリを指定します。たとえば・・・


# 以下は、すべてのアクセスに対してダウンロード速度を
# 1000バイト/秒(1KB/秒)に制限する場合
BandWidth all 1000
もし、ローカルからのアクセス(192.168.x.x)は制限をかけない場合は、

# 2番目の値を「 0 」にすると制限無しになる
BandWidth 192.168 0
BandWidth all 1000
となります。

実際の挙動

では、実際にどういう設定をすると、どのような速度になるか・・・を見てみましょう。

制限をかけない場合

制限をしない場合
制限をかけない場合は、このように「 0 」を指定します。
画像では、1.66MB/秒になっていますね。
これは13.28Mbpsになります。
なぜ、ローカルからアクセスしているにもかかわらずこんな低い値かは不明ですが・・・。
まぁ、デフォルトだとこのくらいの値になります。

40KB/秒

1秒間に40KBダウンロードさせるには、

BandWidth all 40000
になります。単位はバイトなので、40KBの場合は40000Bですね。この場合、
40KB/秒に制限をした場合
うーん。実際には「転送率」が 40KB/秒にならないといけないはずですが・・・。
19.2KB/秒になっていますね・・・。
とにかく制限をかけることはできました。

80KB/秒

では倍の80KB/秒にしてみましょう。
以下が結果です。
80KB/秒に制限した場合
これも80KB/秒にはなっていませんね・・・。
どうも何度か実行させたんですけれど、その時の稼働状況によって変わってくるようです。

120KB/秒

次に120KB/秒にしてみました。
だいたいこれだと、1Mbps程度の速度になります。
120KBに制限した場合
やはり指定した数値は出ていませんが、先ほどより速くなりましたね。

適切な値

さて、ではどのくらいの値が適当なんでしょうか。
これは動画のビットレートに関係してきます。
ビットレートとは、デジタルカメラでいう200万画素・・・のような画素数にあたるもので、1秒間辺りのデータ量のことを刺します。
当然、ビットレートが高い程高画質になりますが、そうも単純にいかず・・・
最近では映像圧縮技術が向上して、低いビットレートでも高画質にさせることが可能になりました。

たとえば、ハイビジョンの前に普及したスタンダードビデオカメラのDV規格のビットレートは25Mbps。
で、ハイビジョンの場合、スタンダードビデオカメラの4倍の情報量になるため、100Mbpsになります。
が、映像圧縮技術にMPEG2というコーデックを使用することで、DVと同じ25Mbpsで100Mbpsと同じ画質を維持しています。
最近登場した次世代規格のAVCHDの場合は、さらに圧縮効率の高いMPEG4を使用しているため、このHDVとほぼ同じ画質を15Mbpsで維持しています。

そこで、これらの動画を配信する場合は、HDVで撮影した動画をそのまま配信するには、25Mbpsほどの速度が出せれば、とぎれとぎれの起こらないスムーズな再生が可能です。
AVCHDの場合は、15Mbpsでスムーズに配信可能です。
ところが、先ほども書きましたが、私のBフレッツでの上がりの速度は、35Mbps程度。
つまり、HDVであれば1人が動画を見たら、他の人にのこりの10Mbpsを分配して使わなくならなくなり延滞が起こります。
AVCHDでも、2人が限界になってしまいます。

映像を圧縮して配信

撮影した映像をそのまま公開するのは、あまりにも帯域を無駄に使ってしまいます。
そこで映像を圧縮するわけです。

映像には自宅サーバがおすすめさんでは、ハイビジョン動画を3~5Mbpsまで圧縮して配信されています。
が、見てわかる通り非常に高画質!
もし、仮に3Mbpsまで圧縮して公開する場合は、上がり35Mbps程度であれば、10人がアクセスして動画を鑑賞しても余裕がある状態になります。
で、この場合の先ほどの bandwidth の値は・・・・

BandWidth all 375000
となります。
まぁ先ほどの例のように、多少設定した値より遅くなるかもしれないので、

BandWidth all 400000
ぐらいでもかまわないでしょう。
もし、YouTubeのように画質をかなり落としてもかまわないのであれば、0.7Mbpsまで落とせるかもしれません。
この場合は、

BandWidth all 87500
になります。
どちらにしろ、映像を圧縮すればファイル自体のサイズも小さくなるので、ダウンロード時間も速くなり、結果的に同時アクセスが減るので、画質と妥協の兼ね合いを考えて設定してください。

公開動画

江ノ島岩場 映像ビットレート:3Mbps
・ 再生時間:6秒
・ ファイルサイズ:2.5MB
・ 解像度:1440x1080
上の映像は、実際に当サイトで公開しています。
BandWidthは、無制限にしているのでどれぐらいの速度か試してみてください。
※ この記事のコメントにどのくらいの速度か書き込んでくれると、参考になります。

かき氷 映像ビットレート:3Mbps
・ 再生時間:1分18秒
・ ファイルサイズ:31.5MB
・ 解像度:720x540

 

Yahoo!ブックマークに登録 Yahoo!ブックマークに登録 にほんブログ村 PC家電ブログ 家電・AV機器へ 2007/08/25 05:16 | このページのトップへ | コメントを書く | 管理

 
 
 
 

関連ページ