とあるクライアントで、ランディングページ(以下LP)にアクセスが集中してしまい、サイトが表示されない現象が発生してしまいました。
とあるクライアントで、ランディングページ(以下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 とかに画像を移すことですね。
この記事をシェアする