apache + lighttpd前端代理概念

时间:2008-10-08 09:07:39

标签: apache lighttpd

为了减轻Apache的负担,人们经常建议使用lighttpd来提供静态内容。

e.g。 http://www.linux.com/feature/51673

在此设置中,Apache通过mod_proxy将静态内容请求传递回lighttpd,同时自动提供动态请求。

我的问题是:这如何减少服务器上的负载?由于每个请求都会产生一个apache进程,这对负载有何影响?从我可以看到,通过lighttpd代理其请求的Apache进程的大小与它为文件本身提供服务时一样大。

5 个答案:

答案 0 :(得分:9)

在 Apache后面运行Lighttpd 来提供静态文件肯定对我来说是个脑子。 Apache仍然必须解压缩HTTP数据包并通过其解析树解析请求,发送代理请求,然后Lighttpd必须重新解压缩,命中文件系统并通过Apache发回文件。我从来没有听说有人在制作中使用这样的设置。

您将看到的是,人们使用像Nginx这样的轻量级网络服务器作为前端服务器来为Apache提供静态文件和代理动态URL。或者,您可以运行VarnishSquid作为缓存反向代理前端,以便所有高流量静态文件(即图像,CSS等任何动态页面你愿意发送缓存友好的标题,是为内存提供服务。

Apache也可以进行优化以提供静态文件 - 所以当我听到人们抱怨Apache时,他们真的不知道如何配置它。他们只使用了prefork MPM(与线程或工作者相比)并且启用了各种模块(通常它们是从Linux发行版的厨房接收器Apache程序包运行的,它将所有内容构建为模块并默认启用10-20模块或更多)。通过关闭不需要的模块/愚蠢的功能来调整Apache,例如支持.htaccess(这使Apache在每个请求上扫描文件系统!)。 (你也可以运行两个Apache实例,一个“轻”的Apache作为前端代理一个“重”的Apache动态请求...也许你的前端是线程的,但你的后端是prefork因为你必须运行线程不安全外部模块,如mod_php。)

回复:

  

因为你还有一个apache进程   产生的每一个请求都会产生   在,这是如何产生积极影响的   负载?从我可以看到的大小   Apache进程代理它的   通过lighttpd请求同样大   因为它将服务于   归档。

如果您在每个请求中生成进程,那么这意味着您正在使用prefork MPM。请记住,当操作系统报告每个进程的内存使用情况时,并非所有内存都已连接,很多进程都处于空闲状态。当你谈论速度时,你更关心的是请求解析和给定请求的内部代码分支(服务器处理多少处理?)而不是操作系统报告的内存使用情况。

例如,如果你启用类似mod_php的东西,那么每个工作进程将立即上升大约20-40M(取决于PHP解释器中启用的内容),但这并不意味着Apache正在使用静态请求上的内存。当然,如果你在小型静态文件上优化服务器以获得最大的并发性,那么启用mod_php仍然会非常糟糕,你将无法在RAM中安装几乎同样多的prefork进程。

我可能会为Apache提出一个“噩梦配置”, 使其实际上比静态文件服务更慢,而不是将这些请求代理到后端Lighttpd,但它将涉及启用昂贵的功能,如。 Apache中的htaccess在Lighttpd中被禁用,所以这不太公平。

答案 1 :(得分:2)

  1. 如果您仍然拥有同一台计算机中提供静态和动态内容的权力(就像您在referenced article中所做的那样),那么我真的看到了这个设置没有意义。
  2. 也许它确实减少了Apache的负载,因为它不必对磁盘执行IO,但它会增加同一台机器上的Lighttpd负载,从而减少可用加载到apache ...
  3. 也许Lighttpd IO访问比Apache 1.3更轻,但为什么不直接切换到Apache 2或Lighttpd?如果性能真的开始糟糕,请将静态文件托管在另一台机器上(media.yourdomain.com)。
  4. 我在这里找到了如何进行高性能设置的简介: Deploying Django - >在结尾之前滚动到Scaling某个页面

答案 2 :(得分:0)

您没有为每个请求生成Apache进程 - lighttpd直接获取静态文件(图像等)。

答案 3 :(得分:0)

我对Apache的内部运作知之甚少,但我看到的一个解释是关于内存压力。简而言之,Apache试图平衡它用于缓存和动态页面的内存;但通常最终会有太多的缓存和太少的应用程序。如果将它们分成不同的流程,每个流程都会根据负载类型进行优化。

目前,我正在做的是使用nginx作为前端。它真的快而轻,专门设计为前端代理;但也提供静态文件。事实上,既然它也可以调用FastCGI进程,你可以摆脱Apache并仍然可以获得分割文件/应用程序进程的好处。 (还有一些额外的memcached magic看起来绝对天才)

(是的,lighttpd也可以用作Apache和/或FastCGI的前端)

答案 4 :(得分:0)

使用Apache MPM Worker fastcgi这将降低服务器内存使用量。 MPM工作者提供比Prefork更好的静态内容,并且在静态内容方面几乎与lighttpd相当。