こんばんは、最近自転車のライトを交換した naoya です。
今日は、Apache で特定のコンテンツへのアクセスに対して帯域制限する方法を紹介したいと思います。まず、特定のコンテンツの帯域を制限しようと思った背景から説明したいと思います。フォト蔵では、写真と動画をサポートしています。そのため、動画へのアクセスが増えると他の写真などへのコンテンツに対するレスポンスが悪くなってしまうことがあります。動画は、FLV 形式ですが比較的ファイルサイズが大きいものが多いため、FLV のみ帯域制限を行ってみることにしました。
まず、Apache で帯域制限できるモジュールについて調査しました。調査には、Software Design 2007年9月号をおもに参考にさせていただきました。
Software Design (ソフトウエア デザイン) 2007年 09月号 [雑誌]
posted with amazlet on 07.11.15
技術評論社 (2007/08/18)
Software Design 2007年9月号では、いくつかの Apache の帯域制限できるモジュールが紹介されていたのですが、今回選択したモジュールは mod_bw です。
mod_bw を選択した理由は、次のとおりです。
- バーチャルホストに対応している
- 特定のコンテンツ (MIME) 別に設定できる
- 帯域設定が柔軟にできる
- Apache 2 系で動作する
それでは、mod_bw のインストール方法について説明します。
- mod_bw を公式サイトからソースコードをダウンロードします(現時点での最新版は 0.8 です)
- 展開してコンパイルします
apxs -i -a -c mod_bw.c - コンパイル後、mod_bw.so ファイルを /usr/lib/httpd/modules へコピーします
次に設定方法ですが、Apache の設定ファイル httpd.conf に、mod_bw を読み込むように、次の設定を追加します。
LoadModule bw_module /usr/lib/httpd/modules/mod_bw.so
次に、FLV に対して帯域制限する前に、通常の Apache の設定では FLV に対する MIME タイプは設定されてないので、次の設定を追加します。
AddType video/x-flv .flv
次に実際の帯域制限ですが、例えば次のように追加します。この設定は、すべてクライアントに対して最大 1024 bytes/s の制限を行うという意味になります。この設定は、VirutalHost の中に追加します。
BandWidthModule On BandWidth all 102400 MinBandWidth all -1 AddOutputFilterByType MOD_BW video/x-flv
最後に動作確認は、ab (Apache Bench) か、実際にファイルをダウンロードしながら正しく帯域制限が行われているかチェックします。
今回は、Apache で特定のコンテンツのみ帯域制限する方法について紹介しました。帯域には限りがあるので、サイトを訪れてくれたユーザに対して快適なサービスを提供していきたいですね。