我正在使用 lighttpd 作为我的自定义 HTTP 应用服务器的前端代理。我需要为 lighttpd 配置大量(假设大约 5000 个)同时的 http 连接,这些连接具有较大的超时和 KeepAlive 设置。每个连接大部分时间都处于空闲状态。想象一个基于 HTTP 的聊天服务器。
我的 HTTP 服务器使用 http-push Comet 式交互(参见 Wikipediahttp://en.wikipedia.org/wiki/Comet_(编程))。具体来说,AJAX 客户端发送一个 GET 请求,服务器不会立即回复。相反,服务器会保持 HTTP 连接打开,直到需要向客户端发送新状态消息,然后发送 HTTP 回复到 GET 请求。客户端处理回复,然后继续发送另一个 GET 请求,服务器再次不会立即回复。
但是,为了回答这个问题,请求的确切性质并不是必需的。我们所需要的本质上是一个 lighttpd 配置,允许同时打开大量低带宽的 HTTP 代理连接。
如何配置 lighttpd 1.4.19。我在 Ubuntu 8.04 下运行。lighttpd 正在将请求代理到我的应用服务器以及我的 django 后端。
我是不是应该简单地设置
server.max-keep-alive-requests = 5000
一下然后就结束一天的工作了?或者应该有
server.max-fds = 5000
一些更大的数字吗?有哪些记忆方面的考虑?
也许我应该强化我的应用服务器,以便它可以在没有 lighttpd 代理的情况下使用(我对我的编程没有那么自信,因为它可以在没有可靠代理的情况下直接面向世界)?
据称 lighttpd 可以处理 10,000 个同时连接。如何配置它来处理该数量的一半,其中大多数处于空闲状态?
答案1
请记住,每个代理连接至少使用两个 FD,一个用于客户端,一个用于被代理的服务器。另外,请考虑约 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
(请注意,这些以“proxy-core.”而不是“server.”作为前缀):http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModProxyCore
我已经使用 20 000 个并发保持活动连接(Lighttpd <-> 后端)进行了测试并且效果良好。