私は、カスタム HTTP ベースのアプリケーション サーバーのフロントエンド プロキシとして lighttpd を使用しています。大きなタイムアウトと KeepAlive 設定を持つ、多数の (たとえば 5000 程度) HTTP 同時接続用に lighttpd を構成する必要があります。各接続は、ほとんどアイドル状態のままです。HTTP ベースのチャット サーバーを想像してください。
私のHTTPサーバーはhttp-push Cometのようなインタラクションを使用しています(Wikipediaを参照)。http://en.wikipedia.org/wiki/Comet_(プログラミング)具体的には、AJAX クライアントは GET 要求を送信しますが、サーバーはすぐには応答しません。代わりに、サーバーは HTTP 接続を開いたまま待機し、新しい状態をクライアントにメッセージで伝える必要があるまで待機してから、GET 要求に対する HTTP 応答を送信します。クライアントは応答を処理し、別の GET 要求を送信しますが、この場合もサーバーはすぐには応答しません。
ただし、質問の目的上、リクエストの正確な性質は必要ありません。必要なのは、基本的に、一度に多数の低帯域幅の同時 HTTP プロキシ接続を開くことを可能にする lighttpd 構成です。
lighttpd 1.4.19 をどのように設定すればよいですか。Ubuntu 8.04 で実行しています。lighttpd は、アプリケーション サーバーと Django バックエンドへのリクエストをプロキシします。
単に設定し
server.max-keep-alive-requests = 5000
て一日を終えるだけでいいのでしょうか?server.max-fds = 5000
それとももっと大きな数字でしょうか?メモリに関する考慮事項は何ですか?
おそらく、lighttpd プロキシなしで使用できるようにアプリケーション サーバーを強化する必要があります (信頼できるプロキシなしで直接世界に接続するプログラミングにそれほど自信がありません)。
lighttpd は 10,000 の同時接続を処理できると言われています。その半分の接続数、つまりほとんどがアイドル状態の接続数を処理するように設定するにはどうすればよいでしょうか?
答え1
各プロキシ接続では、(少なくとも) 2 つの FD (クライアントに 1 つ、プロキシされるサーバーに 1 つ) が使用されることに注意してください。また、オーバーヘッドとして 5 ~ 50 個の FD も考慮してください。
残りの質問に関しては、自分の環境でアプリケーションをテストして、最適な設定を見つける必要があると思います。
答え2
これを適切に行うには、Lighttpd-1.5.x (SVN からほぼ) が必要になります。これは、1.4.x のプロキシが、1.4.x の Lighttpd <--> バックエンド通信ビットを I/O 多重化しないためです。
私の知る限り、これを実行できるリバース プロキシは Lighttpd-1.5.x だけです。
mod_proxy_core
および を使用しmod_proxy_backend_http
、proxy-core.max-keep-alive-requests
およびを使用しますproxy-core.max-pool-size
(これらの前に「server.」ではなく「proxy-core.」が付けられていることに注意してください)。http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModProxyCore
これを 20,000 の同時キープアライブ接続 (Lighttpd <-> バックエンド) でテストしましたが、正常に動作しました。