Apache mod_limitipconnで同時接続数を制限する
Apacheに同じIPアドレスによる同時接続数を制限する「mod_limitipconn」モジュールを組み込む。
インストール環境
Fedora Core 4と同時にインストールしたApache2.0に、動的モジュール「Dinamic Shared Object(DSO)」として組み込む
mod_limitipconnモジュールのインストール
mod_limitipconnモジュールをダウンロードする
配布場所「mod_limitipconn.c」から「Fedora Core 3 binary rpm」のRPMパッケージをダウンロード。
RPMパッケージをインストールする
# rpm -ivh mod_limitipconn-0.22-1.i386.rpm
インストールできたか確認する
パッケージが一覧にあるか確認
# rpm -qa | grep limit
かつ、「/etc/httpd/modules/mod_limitipconn.so」というファイルが存在するか確認。
参考エントリーはこちら。
mod_limitipconnモジュールの設定
httpd.confを編集する
#mod_limitipcon.soの読み込み
LoadModule limitipconn_module modules/mod_limitipconn.so
#mod_statusを有効
ExtendedStatus On
#mod_limitipconnの設定
#全ての場所とファイルの同時接続数を1に制限
<IfModule mod_limitipconn.c>
<Location />
MaxConnPerIP 1
</Location>
</IfModule>
Apacheを再起動する
# service httpd restart
負荷テストをして動作を確認する
下記エントリーにおいて、同時接続数を変えてテストする。制限を越えたリクエストには「503」のステータスコードがApacheのエラーログに記録される。
mod_limitipconnの設定例
制限無し。
<IfModule mod_limitipconn.c>
<Location />
MaxConnPerIP 0
</Location>
</IfModule>
「/public」への同時接続数を3。
<IfModule mod_limitipconn.c>
<Location /public>
MaxConnPerIP 3
</Location>
</IfModule>
「/music」内のMIMEタイプ「audio/*」のファイルに限り同時接続数を3。
<IfModule mod_limitipconn.c>
<Location /music>
MaxConnPerIP 3
OnlyIPLimit audio/*
</Location>
</IfModule>
「/archives」内のMIMEタイプ「text/*」のファイル以外の同時接続数を1。
<IfModule mod_limitipconn.c>
<Location /archives>
MaxConnPerIP 1
NoIPLimit text/*
</Location>
</IfModule>