我使用 lighttpd 作为我的自定义基于 HTTP 的应用程序服务器的前端代理。我需要为大量(比如说大约 5000 个)同时具有较大超时和 KeepAlive 设置的 http 连接配置 lighttpd。每个连接都会闲置。想象一个基于 HTTP 的聊天服务器。
我的 HTTP 服务器正在使用类似 http-push Comet 的交互(参见 Wikipedia http://en.wikipedia.org/wiki/Comet_(programming))。具体来说,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 个同时连接。如何将其配置为该数字的一半,其中大部分大部分都是空闲的?
请记住,每个代理连接使用(至少)两个 FD,一个到客户端,一个到被代理的服务器。还要考虑 ~5-50 FD 的开销。
至于您的其他问题,我想说您需要在您的环境中测试您的应用程序以找到最适合您的设置。
您需要 Lighttpd-1.5.x(几乎来自 SVN)才能正确执行此操作,因为 1.4.x 中的代理不会 I/O 多路复用 1.4.x 中的 Lighttpd <--> 后端通信位。
据我所知,我发现 Lighttpd-1.5.x 是唯一能够做到这一点的反向代理。
您想使用
mod_proxy_core
andmod_proxy_backend_http
,并使用proxy-core.max-keep-alive-requests
andproxy-core.max-pool-size
(注意这些前缀是“proxy-core.”而不是“server.”):http ://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModProxyCore我已经用 20 000 个并发保持活动连接(Lighttpd <-> 后端)对此进行了测试,并且效果很好。