apacheでバーチャルホストごとの同時接続数制限

必要になりそうなので調べた。apache 2.2で試したところ普通に使えるっぽい。

mod_cband

帯域/同時接続数制限

##         kbps   rps  connection
CBandSpeed 1024   10   30
  • status
<Location /cband-status>
  SetHandler cband-status
</Location>
directive一覧

sourceのdoc/documentation.txtを見るとこれだけある。

CBandDefaultExceededURL
CBandDefaultExceededCode
CBandScoreFlushPeriod
CBandSpeed
CBandRemoteSpeed
CBandClassRemoteSpeed
CBandRandomPulse
CBandLimit
CBandClassLimit
CBandExceededURL
CBandExceededSpeed
CBandScoreboard
CBandPeriod
CBandPeriodSlice
CBandUser
CBandUserSpeed
CBandUserLimit
CBandUserClassLimit
CBandUserExceededURL
CBandUserExceededSpeed
CBandUserScoreboard
CBandUserPeriod
CBandUserPeriodSlice

追記

CBandSpeed の設定値を越えてアクセスが来た場合に、別のサーバへリダイレクトできそうなのがCBandExceededURL あたりかな?と思ったけど、documentに"Specifies a URL where mod_cband should redirect all requests to a virtualhost when the configured transfer limit is exceeded" とtransfer limit と書いているので、これはCBandLimit で設定した値を越えたときのみ有効?

動作を確認しているとCBandSpeed を越えた場合は503 Service Unavailable を返すようなので、ErrorDocument 503 http://sorry.example.com/ などとすればよさげ