limit_conn_zone ディレクティブと limit_conn ディレクティブを使う。
ここのページが参考になった。
cf. http://wiki.nginx.org/HttpLimitConnModuleJa
まずはゾーンの設定。これは制限の対象を何にするかの定義みたい。/etc/nginx/nginx.conf の http セクションの中で定義する。こんな感じ。
limit_conn_zone $binary_remote_addr zone=addr:2m;
$binary_remote_addr という変数は Nginx に標準で定義されている変数で、アクセスして来たクライアントのIPアドレス(バイナリ)が入っている。これをキーにしている、つまり制限の対象にしているわけだ。で、その設定に、addr という名前をつけている。2m と書いてあるのは、キーを保存するためのメモリーを確保しているみたい。
さて、次は実際に制限を設定するほう。例えば、vhost.example.com というバーチャルホストに対するアクセスを制限したければ、/etc/nginx/sites-enabled/vhost.exmaple.com の
server セクションに次のように設定する。
limit_conn addr 1;
これで、同一IPからのコネクションを同時に1つだけに制限できる。
なんか情報が少なくて自信がないけど、EC2 で動かしてるサーバーで試してみたら、ちゃんと制限されて2つ目のコネクションには 503 が帰ってきたので、多分あってる。