% apxs -c mod_bandwidth.chttpd.conf は apxs が勝手に書き換えるので、念のため
% su
# apxs -i -a mod_bandwidth.so
% diff /usr/local/apache/conf/httpd.conf.bak /usr/local/apache/conf/httpd.confで書き換わっているかどうかを確認しておくと良い。 もしコンパイル中にエラーが出た場合は、改行コードが CRLF になっている可能性があるので、LF に変更をする。
212a213
> LoadModule bandwidth_module libexec/mod_bandwidth.so
% nkf -d mod_bandwidth.c > mod_bandwidth.c.nkf
% mv mod_bandwidth.c.nkf mod_bandwidth.c
# mkdir /tmp/
# mkdir /tmp/link
# mkdir /tmp/master
# chown nobody -R wheel /tmp/
# chmod -R 755 /tmp/
# apachectl start起動後は mod_bandwidth が使うディレクトリに関してエラーが出ていないかを error ログで確認。
書式例: | BandWidthDataDir <Directory> |
初期値: | /tmp/apachebw |
記述箇所: | httpd.conf の適当な箇所 |
例) BandWidthDataDir /usr/local/apache/mod_bandwidth
書式例: | BandWidthModule <On|Off> |
初期値: | Off |
記述箇所: | httpd.conf の適当な箇所もしくは Virtual Host 毎 |
例) BandWidthModule On
書式例: | BandWidthPulse <microseconds> |
初期値: | |
記述箇所: | httpd.conf の適当な箇所もしくは Virtual Host 毎 |
Change the algorithm used to calculate bandwidth and transmit data.
In normal mode (old mode), the module try to transmit data in packets of 1KB.
That mean that if the bandwidth available is of 512B,
Setting a value with "BandWidthPulse",
The value is in microseconds. For example, if you set "BandWidthPulse 1000000" (1 sec) and the bandwidth available is of 512B, the sever will transmit 512B, wait 1 second, transmit 512B and so on.
The advantage is a smother flow of data. The disadvantage is a bigger overhead of data transmited for packet header. Setting too small a value (bellow 1/5 of a sec) is not realy useful and will put more load on the system and generate more traffic for packet header.
Note also that the operating system may do some buffering on it's own and so defeat the purpose of setting small values.
This may be very useful on especialy crowded network connection : In normal mode, several seconds may happen between the sending of a full packet. This may lead to timeout or people may believe that the connection is hanging. Seting a value of 1000000 (1 sec) would guarantee that some data are sent every seconds...
帯域幅を計算し、かつデータを送信するために使用されるアルゴリズムを変更します。
通常モード (古いモード) は、1Kbyte のパケットデータを送信しようとします。
the module will transmit 1KB,
wait 2 seconds,
transmit another 1KB and so one.
bandwidth が 512byte の帯域幅を利用可能な場合は、
mod_bandwidth は 1Kbyte を送信しようとし、
2秒待ち、
他の 1KByte を送信する。
BandWidthPuls の値を設定すると、
will change the algorithm so that the server will always wait the same amount of time between sending packets but the size of the packets will change.
サーバーが常に送るパケット間の同じ量の時間待つが、パケットのサイズが変わるように、アルゴリズムを変更することができる。
「BandWidthPulse」で値を飾ること、サーバーが常に送るパケット間の同じ量の時間待つが、パケットのサイズが変わるように、アルゴリズムを変更するでしょう。値はマイクロセカンドであります。例えば、セットすれば、?uBandWidthPulse 1000000"(1秒)および利用可能な帯域幅は512Bであります、severは512Bを送信するでしょう、1秒待つ、512Bなどを送信します。
その利点はデータのsmotherフローです。損失はパケット・ヘッダーのためにtransmitedされたデータのより大きなオーバーヘッドです。あまりにも小さな値(1秒のうちの1/5秒うなる)のセットは、realyに有用でなく、システムに、より多くのロードを置き、パケット・ヘッダーのためのより多くの交通を生成するでしょう。
さらにオペレーティング・システムがその上のあるにバッファーすることを行うかもしれないことに注目する、自分自身のものである、したがって、小さな値をセットする目的をくじきます。
これはespecialyに混み合ったネットワーク接続で非常に有用かもしれません:正常なモードにおいて、数秒は十分なパケットを送ることの間に起こるかもしれません。これはタイムアウトに結びつくかもしれません。あるいは、人々は、接続が掛かっていていると信じるかもしれません。1000000(1秒)の値をSetingすることは、あるデータが毎秒送られることを保証するでしょう...
書式例: | BandWidth <domain|ip|all> <rate> |
初期値: | なし |
記述箇所: | ディレクトリ毎もしくは .htaccess |
<domain|ip|all> には制限を行う対象を指定します。
domain は後方一致、ip は前方一致もしくは bit 指定のサブネットマスク (例: /25) が可能。
<rate> には上限速度を指定します。
単位は byte/秒。
0 を指定すると無制限になります。
複数のドメインや IP アドレスに対する制限を行うときは、1グループ 1行で複数行記述します。
例)
下記のような制限を行う場合
- *.some.com からのアクセスは 1024byte/sec に制限
- 192.168.1.* からのアクセスは無制限
- それ以外からのアクセスは 5120byte/sec に制限
= 制限を行うディレクトリは /home/www/
<Directory /home/www>
BandWidth some.com 1024
BandWidth 192.168 0
BandWidth all 5120
</Directory>
※注意
BandWidth が複数有り、かつ BandWidth all xxx を指定するときは、他の BandWidth の一番最後に記述します。
書式例: | MinBandWidth <domain|ip|all> <rate> |
初期値: | all 256 |
記述箇所: | ディレクトリ毎もしくは .htaccess |
<domain|ip|all> には制限を行う対象を指定します。
内容に関しては BandWidth に準じます。
<rate> は最小転送速度を指定します。
単位は byte/秒。
0 を指定するとデフォルトの all 256 を適用します。
-1 を指定すると回数による転送速度減速が発生せず、いつも BandWidth で指定された転送速度が適用されます。
例)
最小転送速度を全てにおいて 512byte/s に制限する。
帯域制限は 2048byte/s に設定。
<Directory /home/www>
BandWidth all 2048
MinBandWidth all 512
</Directory>
こうすると、たとえば 3072byte のファイルを転送した場合、下記のように転送速度が減衰される。
※
1回目:BandWidth により 2048byte/s に制限 → 転送速度は 2048byte/s MAX
2回目:同一ファイルの速度減衰機能により 2048/2 = 1024byte/s に制限 → 1024byte/s MAX
3回目:同上で 1024/2 = 512byte/s に制限 → 512byte/s MAX
4回目以降:MinBandWidth の設定値が 512byte/s なので、以降は全て 512byte/s に制限 → 512byte/s
書式例: | LargeFileLimit <filesize> <rate> |
初期値: | なし |
記述箇所: | ディレクトリ毎もしくは .htaccess |
--- ここより訳不明 ---
<rate> に 0 を指定すると無制限になります。
-1 にすると BandWidth の制限値を上書きし、指定ファイルサイズ以上は無制限となります (指定ファイルサイズ以下のファイルには BandWidth で指定した制限値が適用されます)。
--- ここまで訳不明 ---
例-1) 1つ定義
<Directory /home/www>例-2) 2つ定義
LargeFileLimit 200 3072
</Directory>
200KB 未満のファイルは BandWidth により制限されます。
200KB 以上のファイルは 3072byte/s に速度制限されます。
<Directory /home/www>例-3) 3つ以上定義
LargeFileLimit 200 3072
LargeFileLimit 1024 2048
</Directory>
200KB 以下のファイルは BandWidth により制限されます。
200KB 〜 1024KB のファイルは 3072byte/s に速度制限されます。
1024KB 以上のファイルは 2048byte/s に速度制限されます。
<Directory /home/www>
LargeFileLimit 200 3072
LargeFileLimit 1024 2048
LargeFileLimit 2048 1024
</Directory>
200KB 以下のファイルは BandWidth により制限されます。
200KB 〜 1024KB のファイルは 3072byte/s に速度制限されます。
1024KB 〜 2048KB のファイルは 2048byte/s に速度制限されます。
2048KB 以上のファイルは 1024byte/s に速度制限されます。
# # ディレクトリ設定 # <Directory "/pub1/www/docroot"> ### Directory に関する設定は一部のみ記載しています。 <IfModule mod_bandwidth.c> # LAN 内は無制限 BandWidth 192.168.1.0/24 0 # そのほかは全て 10Kbyte/s 制限 BandWidth all 10240 # 同一ファイル転送による速度減衰を無効化 (対象:全て) MinBandWidth all -1 ### 上限値設定 ### # 200Kbyte 未満のファイルは BandWidth の帯域制限を適用し、 # 200Kbyte 以上 1024Kbyte 未満のファイルは 3072byte/s の # 帯域制限を適用。 LargeFileLimit 200 3072 # 1024Kbyte 以上のファイルは 2048byte/s の帯域制限を適用。 LargeFileLimit 1024 2048 </IfModule> </Directory> # # mod_bandwidth.c # <IfModule mod_bandwidth.c> # mod_bandwidth の有効化 BandWidthModule On # データディレクトリの指定 BandWidthDataDir /usr/local/apache/bandwidth </IfModule>
# # ディレクトリ設定 # <Directory "/pub1/www/docroot"> ### Directory に関する設定は一部のみ記載しています。 <IfModule mod_bandwidth.c> # LAN 内は無制限 BandWidth 192.168.1.0/24 0 # そのほかは全て 10Kbyte/s 制限 BandWidth all 10240 # 同一ファイル転送による速度減衰を無効化 (対象:全て) MinBandWidth all -1 ### 上限値設定 ### # 200Kbyte 未満のファイルは BandWidth の帯域制限を適用し、 # 200Kbyte 以上 1024Kbyte 未満のファイルは 3072byte/s の # 帯域制限を適用。 LargeFileLimit 200 3072 # 1024Kbyte 以上のファイルは 2048byte/s の帯域制限を適用。 LargeFileLimit 1024 2048 </IfModule> </Directory> # # VirtualHost # <VirtualHost www.some.com> ### Directory に関する設定は一部のみ記載しています。 # VirtualHost 内での DocumentRoot DocumentRoot /pub1/www/docroot <IfModule mod_bandwidth.c> # mod_bandwidth の有効化 BandWidthModule On </IfModule> </VirtualHost> # # mod_bandwidth.c # <IfModule mod_bandwidth.c> # データディレクトリの指定 BandWidthDataDir /usr/local/apache/bandwidth </IfModule>