Mazn.net

やってみて 調べてみて 苦労しなけりゃ 箱は動かじ

WordPress高負荷対策→同一ApacheのIPのアクセス数制限@CentOS 5

      2011/10/08

一日に数回サーバ高負荷で応答がなくなってしまって困っていました。load average 90超え!!ありえん・・・
低性能なサーバなのに、大してApacheもMySQLものチューニングしていないからなあ・・・

ということで、最初はWordpressがアクセスしているMySQLが重たいのではと思い、メモリや接続数を少なくしてみたが効果なし。ということで、基本に戻って、まずは現状把握から。

sysstat パッケージでsarによる性能情報収集を開始し、topの結果を数秒おきにログに保存、さらに長い時間がかかるSQLもログに記録するようにしてみてわかったこと。それは、

  • DoSアタックとは言わないが、同一IPからの大量アクセスが発生
  • httpdプロセスが大量に生成
  • 非力なサーバでスワップが発生しまくり
  • 処理しきれずダウン

という典型的な非力サーバの事象でした。

で、httpd.confをよく見ると、ServerLimitやMaxClients がデフォルトで 256 と、非力なサーバでは処理しきれない値になっている・・。とりあえサーバの最大プロセス数を数個に削減。そんなにアクセスがあるサーバではないので問題ないと思う。

次に、同一IPからの連続アクセスは制限をかけました。

具体的には、mod_limitipconn というApacheモジュールを入れました。
これはその目的通り、同一IPからの接続を制限するためのモジュールです。epel のリポジトリに入っているので、リポジトリを設定している人であれば、インストールは

 # yum install mod_limitipconn

とするだけです。リポジトリ設定していない人は、この辺りから適当にRPMをダウンロードしてインストールしましょう。
あとは、httpd.conf に

 MaxConnPerIP 5

と追記して、apacheをリロードすれば、どういつIPからは5接続に制限できます。制限に達するとレスポンスコード503が返ります。

ちなみに、同じページに画像などが複数あると、この接続数に達して、画像が一部表示できないことがあります。なので、対象のディレクトリの設定で、

<Directory "/var/www/html">
   ~ 省略 ~
    NoIPLimit image/*
</Directory>

と記述してあげれば、画像はこの制限から除外することができます。

 

参考 : Apache で同一IPからの接続数を制限する mod_limitipconn 設定方法

MaxClients

 - IT技術, サーバ構築, ネットワーク , , ,

336px

Message

メールアドレスが公開されることはありません。

  関連記事

no image
日本語入力@Debian etch

以下のコマンドで今使用している日本語入力がわかる $ im-switch -l …

no image
Firefox 1.5へのJavaプラグインインストール@RHEL5 x86_64

Red Hat Enterprise Linux 5 に同梱されているFiref …

no image
CDやDVDの中身が見れない@Windows Vista

最近悪名高いWindows Vistaを使っているのですが、一通り設定や必要そう …

no image
自分のWebページにTwitterの呟きを表示

WordPressのTwitter表示プラグインが重たいので、直接以下のコードを …

no image
リモートデスクトップサーバ構築@Ubuntu 14.04 LTS

Ubuntu 14.04.2 LTS (Cloud-image版)に、リモートデ …

no image
gmailでフィルタリング転送した時メールは受信トレイに残るの?

gmailの基本転送機能は全てのメールをあるアドレスに転送しますが、フィルタを用 …

no image
VLANの設定@Cisco Catalyst 2960

VLANの設定方法についての覚え書き。 まずは、新しいVLANの作成 sw# c …

no image
BeckyからThunderbirdへのデータの移行

BeckyからThunderbirdへのデータの移行はネット上に多くの事例が掲載 …

no image
EntityBean @ JBoss 4.2

JBoss 4.2でEntityBeanを作ってみた。 @Idアノテーションは書 …

no image
screenコマンド@cygwin with ck

cygwinのターミナルck上でscreenを使用しようとすると、デタッチ後にア …