サーバ用でないWindowsのIISには、同時接続数が最大10という制限がある。
いきなり余談だが、この制限のかけかたがVistaで変わった。制限に達しているときに届いたリクエストに対するレスポンスが異なる。XPまではエラーを返していたが、Vistaではリクエストをキューに入れて順次処理してくれる。
さて本題に戻る。
Windows 2000の時代には、この制限を解除するリミッター外しが行われたこともあった。これはライセンス違反だが、今回ご紹介するのはそれではない。VistaのIISのようにリクエストをキューにためる方法である。使うのはApache HTTPD 2.2。誰でも思いつきそうな方法だが、検索しても見当たらないので、ここに書いておく。
mod_proxyのProxyPassディレクティブにはmaxというパラメータが指定できる。これは、
・バックエンドサーバとの接続数の上限を指定
・プロセスに対する指定であり、Apache HTTPD全体に対する指定ではない
Apache HTTPDとプロセスの関係は以下のとおり。
・Windowsならプロセスは1個
・それ以外のOSなら最大プロセス数はServerLimitディレクティブで決まる
実際にやることは、たとえばDebian Lennyなら、
・/etc/apache2/mods-available/proxy.confに:
ProxyRequests Off
ProxyPass /test/ http://192.168.0.253/test/ max=4
ProxyPassReverse /test/ http://192.168.0.253/test/
・/etc/apache2/apache2.confに:
ServerLimit 2
なお見てのとおり、prefork MPMでは実用的ではない(2.2にもなってpreforkを使う人がいるとも思えないが)。