Apache で同一IPからの接続数を制限する mod_limitipconn 設定方法
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 対策や、極端に同時接続を要求してくるクローラ、ダウンローダを弾くためのものと考えて、余裕のある設定値としましょう。
コメントはまだありません
No comments yet.
Sorry, the comment form is closed at this time.