2008年9月24日水曜日

mod_cband Apache2.2の設定 帯域制限@FreeBSD

FreeBSDの場合Portsからmake install すればとりあえずApache2へのインストールは完了します。以前の記事参照 mod_cbandを入れてみた

■Apache2の帯域制限の設定 mod_cband

ここではmod_cbandの設定方法を説明します。
httpd.confを編集します。
FreeBSDの場合
/usr/local/etc/apache22/httpd.conf
を編集します。
他のOSを使われているかたは、それぞれのApache2の設定ファイルを編集します。
FedoraCore5: /etc/httpd/conf/httpd.conf
Debian: /etc/apache2/httpd.conf

mod_cbandはVirtualHostごとに設定を行うので、ディレクティブに記入していきます。ローカルでサーバーを立てているときやドメイン1個にしか対応していないときは、ディレクティブが無いので追記します。
サーバーのIPアドレスが192.168.0.200ならば

<VirtualHost 192.168.0.200>
</VirtualHost>

としてください。
以下サーバーのIPアドレスが192.168.0.200として説明します。
このサーバーのドメイン名はwww.example.jpとして公開されているものとします。

<VirtualHost 192.168.0.200>
ServerName www.example.jp
ServerAdmin admin@example.jp
DocumentRoot /home/www/public_html
</VirtualHost>

ここでServerNameは必須です。
もしServerNameを指定しなかった場合

Starting httpd:[Sun Jun 11 13:24:11 2008][warn]
Invalid command 'CBandSpeed',undefined virtualhost name

と表示されます。

■単位の表記方法
帯域制限をかける上で、帯域の表記方法が必要になります。
次にその表記方法を示します。

送信速度
kbps:1024 bits per second
Mbps:1024x1024 bits per second
Gbps:1024x1024x1024 bits per second
デフォルト kbps

クオータ(送信データの累積量)
K:1000 bytes
M:1000x1000 bytes
G:1000x1000x1000 bytes
Ki:1000 bytes
Mi:1000x1000 bytes
Gi:1000x1000x1000 bytes
デフォルト K (キロバイト)

時間
S:秒
M:分
H:時
D:日
W:週
デフォルト S (秒)

mod_cbandのパフォーマンスを改善するために、次のディレクティブをhttpd.confに追加します。
[/usr/local/etc/apache2/httpd.conf]
CBandScoreFlushPeriod 1
CBandRandomPulse On

次にスコアボードを保存するフォルダを作成します。
このフォルダはどこでもいいのですが、パーミッションの設定が必要です。
#mkdir /var/apache
#mkdir /var/apache/scoreboard
chown www:www /var/apache
chown www:www /var/apache/scoreboard

■ダウンロードスピードの設定

以下httpd.confを設定しますが、設定を反映させるには

#apachectl restart

を行って下さい。


○例1:
ホストの帯域制限+接続クライアントの帯域制限

<VirtualHost 192.168.0.200>
ServerName www.example.jp
ServerAdmin admin@example.jp
DocumentRoot /home/www/public_html
CBandSpeed 1024kbps 10 30
CBandRemoteSpeed 20kbps 3 3
</VirtualHost>

CBandSpeedでは、バーチャルホスト www.example.jp全体の帯域制限を行います。
送信速度1024kbps、1秒あたりの最大接続要求数 10、最大(継続)接続数 30
に制限します。
CBandRemoteSpeedでは、接続してきたクライアントに対して帯域制限をおこないます。
帯域制限 20kbps、1秒あたりの最大接続要求数 3、最大(継続)接続数 3
に制限します。
CBandSpeedの帯域制限は、www.example.jpに接続する各クライアント(ブラウザ等)すべて積算し(含め)た帯域を制限します。


○例2:
ホストの月間送信量の制限+超過時の減速設定

<VirtualHost 192.168.0.200>
ServerName www.example.jp
ServerAdmin admin@example.jp
DocumentRoot /home/www/public_html
CBandLimit 100M
CBandExceededSpeed 128kbps 5 15
CBandScoreBoard /var/apache/scoreboard
CBandPeriod 4W
</VirtualHost>

CBandLimit 100M
CBandPeriod 4W
で、1ヶ月あたり100MByteの送信量に制限しています。
もし、この送信量を超えれば、
CBandExceededSpeed 128kbps 5 15
で、128kbps 1秒当たりの最大接続要求 5  最大(継続)接続数 15
に制限されます。


○例3:
ホストの月間送信量の制限+超過時は503エラーを返す

<VirtualHost 192.168.0.200>
ServerName www.example.jp
ServerAdmin admin@example.jp
DocumentRoot /home/www/public_html
CBandLimit 100M
CBandScoreBoard /var/apache/scoreboard
CBandPeriod 4W
</VirtualHost>

CBandExceededSpeedディレクティブを削除すると503エラーを返します


○例4:
ホストの月間送信量の制限+超過時は503エラーを返し+指定されたURLへリダイレクトする

<VirtualHost 192.168.0.200>
ServerName www.example.jp
ServerAdmin admin@example.jp
DocumentRoot /home/www/public_html
CBandLimit 100M
CBandExeededURL http://www.example.jp/traffic_exceeded.html
CBandScoreBoard /var/apache/scoreboard
CBandPeriod 4W
</VirtualHost>


■ステータスページの表示
mod_cbandには現在の動作状態を表示するステータスページがあります。
VirtualHostディレクティブに<Location /cband-status>...等を追加します


<VirtualHost 192.168.0.200>
ServerName www.example.jp
ServerAdmin admin@example.jp
DocumentRoot /home/www/public_html
CBandLimit 100M
CBandExeededURL http://www.example.jp/traffic_exceeded.html
CBandScoreBoard /var/apache/scoreboard
CBandPeriod 4W
<Location /cband-status>
SetHandler cband-status
</Location>
<Location /cband-status-me>
SetHandler cband-status-me
</Location>

</VirtualHost>

これらの画面を表示するには、
www.example.jp/cband-status
www.example.jp/cband-status-me
をブラウザで開きます。

0 件のコメント: