apache2.2へ mod_bw0.7の組み込み
sorry Japanese only
PAGE作成日 2006/08/17
最終更新日 2006/08/17
page size = Mbyte


関連するページ apache2へ bw_modの組み込み 許せないクローラー ファイルの内容を表示する 見て欲しくない人を拒否する設定 .htaccessを使った個別に拒否する方法 検索エンジンの拒否をする設定

このページは apache2.2系に mod_bw ver0.7を installしたときに作成したページです
apache2.0系に bw_mod ver0.6を入れたときのページも参考にしてください

以前から apache1には合っても apache2に無かった mod_bandwidth、mod_throttleと同じ事を行える moduleを発見しました。
帯域の制限を行えるモジュールです

参考にさせていただいたページ パソコンおやじさんの Apache2.0系で帯域制限をしたいページと YANO's digital garageさん

Apache Modules - Ivn Softwareさんより
mod_bw0.7を downloadします

解凍します

apxsを使いコンパイルします
[root]# /usr/local/apache2/bin/apxs -i -a -c mod_bw.c
/usr/local/apache2/build/libtool --silent --mode=compile gcc -prefer-pic   -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -g -O2 -pthread -I/usr/local/apache2/include  -I/usr/local/apache2/include   -I/usr/local/apache2/include
  -c -o mod_bw.lo mod_bw.c && touch mod_bw.slo
/usr/local/apache2/build/libtool --silent --mode=link gcc -o mod_bw.la  -rpath /usr/local/apache2/modules -module -avoid-version    mod_bw.lo
/usr/local/apache2/build/instdso.sh SH_LIBTOOL='/usr/local/apache2/build/libtool' mod_bw.la /usr/local/apache2/modules
/usr/local/apache2/build/libtool --mode=install cp mod_bw.la /usr/local/apache2/modules/
cp .libs/mod_bw.so /usr/local/apache2/modules/mod_bw.so
cp .libs/mod_bw.lai /usr/local/apache2/modules/mod_bw.la
cp .libs/mod_bw.a /usr/local/apache2/modules/mod_bw.a
ranlib /usr/local/apache2/modules/mod_bw.a
chmod 644 /usr/local/apache2/modules/mod_bw.a
PATH="$PATH:/sbin" ldconfig -n /usr/local/apache2/modules
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/local/apache2/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
chmod 755 /usr/local/apache2/modules/mod_bw.so
[activating module `bw' in /usr/local/apache2/conf/httpd.conf]

これは成功した例
しかし apache2を起動すると以下のエラーが出る場合には
[root]# httpd -k start
httpd: Syntax error on line 234 of /usr/local/apache2/conf/httpd.conf: 
Cannot load /usr/local/apache2/modules/mod_bw.so into server: 
/usr/local/apache2/modules/mod_bw.so: undefined symbol: apr_atomic_add

このようなエラーが表示されるときには、mod_bw.cの apr_atomic_addが
書かれている if文の条件を以下のように変更するとエラー回避できます

/* Compatibility for APR < 1 */
#if (APR_MAJOR_VERSION >= 1)
    #define apr_atomic_inc32 apr_atomic_inc
    #define apr_atomic_dec32 apr_atomic_dec
    #define apr_atomic_add32 apr_atomic_add
    #define apr_atomic_cas32 apr_atomic_cas
    #define apr_atomic_set32 apr_atomic_set
#endif
緑色の条件判断の記号を変える。(元は <)

コンパイル終了すると、httpd.confに 1行追加されます。

# Example:
# LoadModule foo_module modules/mod_foo.so
LoadModule php5_module        modules/libphp5.so
LoadModule bw_module          modules/mod_bw.so         <===== ここ!
#

書き換える前のファイルは httpd.conf.bakで保存されていました。

次に、httpd.conf内へ、自分の好きなように制限を書き込みます。
私は以下のように書き込みました。
<Directory "/home/localhost/douga">
BandWidthModule On
ForceBandWidthModule On
LargeFileLimit .tst 1000 1200

BandWidth 202.217.35.0/255.255.255.224 8000
BandWidth search.re2.yahoo.com 8000
BandWidth public.alexa.com 8000
BandWidth 216.143.234.135 8000
BandWidth 65.19.150.0/255.255.255.0 8000
BandWidth 203.146.244.93/255.255.255.0 8000

</Directory>
dougaディレクトリーの全ファイルに対し、特定のサイト(動画も downしようとするクローラー)
への転送速度を 8000byte/sec = 64kbit/secに制限します。

BandWidthの構文は、上から流れてきて一致した物が採用されます。
HITさせたい条件を下の方に書いておいても、上で HITしたら下に書いておいた条件にはなりません。
注意が必要です

おまけで以下の文も追加しておきました。
LargeFileLimit .tst 1000 1200
.tstの拡張子が付いた 1000kbyte以上のファイルは 1200byte/secに転送速度を抑える。

http://miya0.dyndns.org/douga/900k.tst 速度制限無し
http://miya0.dyndns.org/douga/1100k.tst 1200byte/secに速度制限付き

上の 900k.tstは、転送速度制限がかかってないので、あなたのサイトと私のサイト間の最高速度。
下のファイルは 1200byte/sec 9600bit/secへ転送速度の制限がかかっていると思います。
昔のアナログモデムの転送速度をお楽しみ下さい・・ 9600ボーです。
右クリック、保存で確認するのが良いと思います。

じれったいんで、キャンセル押して中断してください。


16697
戻る