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

2010-4-19 07:00
このエントリーをはてなブックマークに追加

Apache で同一IPからの同時接続数を制限するためのモジュールで有名なのが mod_limitipconn です。決められた値以上の同時接続に対しては 503 のステータスコードを返します。

CentOS であれば EPEL から RPM を導入できます。EPEL の利用設定がしてあれば yum でインストールできます。

# yum install -y mod_limitipconn

設定ファイルは /etc/httpd/conf.d/limitipconn.conf です。これを修正します。

    MaxConnPerIP 10
  
    <Location /somewhere>
        MaxConnPerIP 3
        NoIPLimit image/*
    </Location>

   <FilesMatch "\.(zip|mp?g|iso)$">
        MaxConnPerIP 1
    </FilesMatch>

この例ではサーバ全体で、同一IPからの同時接続数を10に制限します。さらに /somewhere ディレクトリの下は3に制限します。ただし、画像については制限をかけません。これは画像をたくさん貼ったページなどで表示されなくなることを防ぐためです。NoIPLimit に指定しているのは mimetype です。

また拡張子で、.zip、.mpeg、.mpg、.iso については 1 に制限をかけています。この制限が一番厳しいので、.iso をダウンロードしていると同一サーバの他のコンテンツにはアクセスしても 503 が返されます。

Apache を再起動したら ab コマンドでテストしてみます。たとえば同時接続数 3 のファイルに対して、

# ab -n 10 -c 10 -t 30 http://localhost/somewhere/test.html

のように実行してみます。(-t は Timeout の秒数です。) ログを見て 10 のリクエストのうち、Complete requests が 3つ、Failed requests が残り 7 つであれば正常に動作しています。Failed のときはレスポンスコードとして 503 が返されます。

あとはブラウザで問題がないか確認してみてください。制限を極端にかけすぎると画像が表示できなくなったり、CSS や JavaScript のファイルが読み込まれないなどの不具合が起きます。あくまでも DoS 対策や、極端に同時接続を要求してくるクローラ、ダウンローダを弾くためのものと考えて、余裕のある設定値としましょう。

  • ブックマーク : アクセス: 36,906回
  • カテゴリー : Apache
  • キーワード :

コメントはまだありません

No comments yet.

Sorry, the comment form is closed at this time.

69 queries. HTML convert time: 1.230 sec. Powered by WordPress. Valid XHTML
Copyright © 2003-2017 @ futuremix.org ログイン