Lighttpd 在 Apache 前面的另一个好处

Lighttpd 在 Apache 前面的另一个好处

我在一个网站上看到,在 Apache 前面使用 Lighttpd 的另一个好处是子进程数量较少。Lighttpd 将处理保持活动和客户端请求,而 Apache 的子进程可以更快地提供动态页面,因为 Lighttpd 和 Apache 之间的通信延迟非常低。我正在尝试找到链接,但遇到了困难。

鉴于我已经有一个专用的 Lighttpd 服务器用于存储静态内容(img、vid、css、js、html 等),还有另一个专用的 Apache 服务器用于存储动态页面(php),如果它确实可以提高性能,我愿意实现这种技术。

1) 是否有人将 Lighttpd 放在 Apache 前面,以实现上述相同的目的?
2) 这样真的能提高性能吗?能提高多少?
3) Lighttpd 处理对 Apache 的请求的开销如何?真的值得吗?

谢谢!

答案1

  1. 我们轻量级地提供静态内容,并将动态请求转发到同一服务器上的 Apache,但监听另一个端口
  2. “转发到 Apache 进行动态处理”不是为了提高性能,而是为了从客户端的角度看,拥有一个服务器来提供所有服务。但是,如果您可以避免与 Apache 建立过多连接,那么这是一个很好的附带好处。更多连接 = 更多进程 = 更多内存(尤其是使用 mod_php)。所以,没有数字,抱歉。
  3. 与 Apache 的庞大规模相比,开销似乎微不足道

也就是说,您应该考虑使用 Varnish 反向代理而不是 lighty(或将其置于 lighty 之前)作为前端。它非常快速且高效。对于缓存动态页面(或使用 ESI 的页面片段)尤其有用,它有助于减少后端负载并吸收流量高峰。

并且可能使用 nginx(带有 PHP-FCGI)作为后端而不是 Apache(尽管这比添加 Varnish 前端更复杂)(nginx 也可以用作前端,但不如 Varnish 这样的专用反向代理好)。免责声明:我没有 nginx 经验 ;)

答案2

我曾经遇到过同样的情况,在 apache 旁边起诉 lighttpd) 以减少 apache 的负载。

最好使用轻量级 Web 服务器来提供静态内容,因为它需要的资源较少。还必须指出,PHP 需要 Apache 在预分叉模式下运行,这会禁用 Apache 高效运行。您可以将负载分配到两个不同设置的 Web 服务器上,每个服务器处理其最擅长的流量。

一些实施说明:

您有三个选择:

  1. 修改代码并在 IP 层上分段流量
  2. 不要修改代码,也不要对应用层(http)的流量进行分段
  3. 让其中一个 Web 服务器将请求传递到另一个 Web 服务器进行实际服务

第一个更快,第二个需要的配置更少,第三个就像骡子一样。

如果我是你,我不会考虑第三个选项,因为它会带来配置噩梦,而且,如果你在第一个 Web 服务器上配置错误,那么什么都行不通,而且更难发现问题所在。

过去,我需要紧急解决问题,因此我选择了选项 2,并使用了名为根据静态/动态内容对请求进行分段,并将负载分配到两个不同的 Web 服务器上。

虽然它可以工作,但它需要主动监控 http 内容,这会对性能造成影响(运行额外的守护进程)。

使用选项 2,您可以利用额外的 IP 来获取静态内容 (static.domain.org),并让客户端引用此 static.domain.org 来获取内容,从而获得更好的性能。它仍然需要反向代理,但代理不必检查任何请求中的 Host: 标头,因此速度会更快。

以下是 pound 的配置片段,供您参考:

ListenHTTP 
        Address 195.175.71.17
        Port 80
        Client 30
        RewriteLocation 2

        Service
                HeadRequire "^[Hh]ost:\s*www.nasa.gov$"
                URL "^/static/content"
                BackEnd
                        Address 127.0.0.1
                        Port 81
                        TimeOut 300
                End
        End
        Service
                HeadRequire "^[Hh]ost:\s*www.nasa.gov$"
                BackEnd
                        Address 127.0.0.1
                        Port 80
                        TimeOut 300
                End
        End
ListenHTTP 

相关内容