ホーム > フラッグblog > Apacheのmod_bwを使って帯域制限をかける。
Date 2013/04/15   

Apacheのmod_bwを使って帯域制限をかける。

とあるクライアントで、ランディングページ(以下LP)にアクセスが集中してしまい、サイトが表示されない現象が発生してしまいました。

 

詳しく見ていみると、LPに使われている画像が重たいせいで、

トラフィックが天井に張り付いてしまって通信できていない状態みたい。

 

 

LPに帯域が集中して、本家のECサイトが引っ張られて表示、購入できない状態を回避しようとおもい、色々調べてみたところ

Apace の mod_bw というモジュールを使って帯域制限をかけれるみたいです。

 

参考にさせてもらったのはこちら

http://cent2.sblo.jp/article/64885019.html

 

yum --enablerepo=epel -y install mod_bw

yumで簡単インストールします。

 

 

で、設定。

今回のサーバーの回線は 専用10Mbpsだったので、

8Mbpsぐらいで制限がかかるように設定します。

忘れてたんですが

8Mbpsってメガビット/秒 なので、MBに直すと 1MB/s ですね。

 

 

まず、httpd.conf の設定見直し。

あらためてググって調べたところ

MaxClients       を超える接続が合った場合は ListenBacklog の値まで待ちキューに入るらしい。

簡単に503エラーは出したくないので、考えて以下の様な設定にしました。

vim /etc/httpd/conf/httpd.conf
<IfModule prefork.c>
StartServers      20
MinSpareServers   20
MaxSpareServers   20
ServerLimit      512
ListenBacklog    512
MaxClients       10
MaxRequestsPerChild 40000
</IfModule>

 

 

 

同時接続数10、

 

512接続までは待ち状態になるはず。

512接続を超えるアクセスは503エラーになります。

 

 次に mod_bw.conf の設定

vim /etc/httpd/conf.d/mod_bw.conf
LoadModule bw_module modules/mod_bw.so
<Directory "/var/www/vhosts/hogehoge.jp/html/lp/">
    BandWidthModule On
    ForceBandWidthModule On
    BandWidth all  1000000
    MaxConnection all 100
</Directory>

/lp/ 以下に制限をかけます。

    BandWidth all  1000000 で最大約1000kbyte/s に設定。

 1000kbyte/s  =  1MB/s  =  8Mbpsに収まる設定です。

 また同時に MaxConnection all 100 を設定して、100までは待ちキューに入るはず。。

 /lp/ 以下は、100以上のアクセスがあると503エラーとして返すはずです。

 

 httpd.conf の ListenBacklog より少なくしたのは、本家にできるだけ影響がないように。

 

最後にキャッシュ。

出来るだけ画像にアクセスを減らすためキャッシュ設定を追加します。

httpd.conf に mod_cache が読み込まれていれば、

/lp/.htaccess  に以下を追加

ExpiresActive On
ExpiresByType image/gif "access plus 30 minutes"
ExpiresByType image/jpeg "access plus 30 minutes"
ExpiresByType image/png "access plus 30 minutes"
ExpiresByType application/x-shockwave-flash "access plus 30 minutes"
ExpiresByType application/rss+xml "access plus 30 minutes"
ExpiresByType application/x-javascript "access plus 30 minutes"
ExpiresByType text/html "modification plus 30 minutes"
ExpiresByType text/css "access plus 30 minutes"

30 分はキャッシュ。

 

コレで様子見たいと思います。

 

 あ、根本的解決としては Amazon CloudFront とかに画像を移すことですね。

この記事をシェアする

TOP

Flagsystem