Apacheのモジュールでコンテンツの帯域制限をかける

Apache 2.xでコンテンツの転送速度制限をかける方法のメモです。共用レンタルサーバや従量課金の AWS などを使っていてサイトの転送量を抑えたい場合など使えると思います。

mod_bw モジュール導入

リポジトリを指定し yum でインストールします。

yum --enablerepo=epel install mod_bw

設定ファイルのバックアップを取り、設定ファイルの設定を行います。

mv /etc/httpd/conf.d/mod_bw.conf /etc/httpd/conf.d/mod_bw.conf.orig
vi /etc/httpd/conf.d/mod_bw.conf

同じクライアントからのアクセスを2Mbps(256kbytes/s)に制限する場合の mod_bw.conf の内容です。BandWidth は転送可能な秒間バイト数です。

<IfDefine HAVE_BW>
  <IfModule !mod_bw.c>
    LoadModule bw_module    extramodules/mod_bw.so
  </IfModule>
</IfDefine>

<IfModule mod_bw.c>
  BandWidthModule On
  ForceBandWidthModule On
  BandWidth all 256000
</IfModule>

128bytes 以上の .flv と .avi ファイルに対して2Mbps(256kbytes/s)に制限する場合の例です。LoadModule は省略。

<IfModule mod_bw.c>
  BandWidthModule On
  ForceBandWidthModule On
  BandWidth all 256000
  LargeFileLimit .flv 128 256000
  LargeFileLimit .avi 128 256000
</IfModule>

設定が終了したらサーバを再起動します。

/etc/init.d/httpd restart

帯域制限がかかっていることを確認

ab コマンドなどでコンテンツの転送速度が制限なされていること、Apache のエラーログにエラーが出ないことを確認します。

ab -n 1 -c 1 http://example.com/hoge.flv