背景
lighttpd和nginx是近年来两个流行的高性能web server。nginx在近几年冒起很快,根据netcraft对2010年2月所有网站域名的web server市场份额调查显示,nginx占据第4位,已明显超越了lighttpd,如下图示:
百度有一些服务使用lighttpd,我们希望对 nginx开展调研,并和lighttpd进行对比。
概述
Nginx和lighttpd基本上是同质的,都是采用基于epoll/kqueue/select的全异步事件模型,可以轻松地维持大量的连接,不惧怕慢连接攻击。两者都提供了丰富的HTTP服务功能,例如压缩、url rewrite、虚拟主机、SSL、proxy等等。
Nginx大量模仿了apache的设计风格,比如模块的定义、装配、以及配置数据的解析和组织方式等等。Lighttpd则是自己设计的一套。 和lighttpd相比,Nginx做事更加精细,它提供的一些比较特别。
Nginx的代码入手更困难一些(主观看法)。举个例子,Nginx内部的HTTP状态迁移是比较隐性的,它通过一系列的handler赋值来实现,如果要完整地追踪一次HTTP请求的处理过程,比较费劲。这个就说明,一旦出了问题,追查比较困难。而lighttpd的代码中有一个显式的HTTP状态迁移,一目了然,相比之下比较好看一些。
扩展模块开发方面,nginx的module模仿了apache的设计和实现方式,和lighttpd是完全不同的。主观感觉上nginx模块开发的入门门槛更高一些,因为必须弄清楚nginx的内部运行机制才好确认你写的代码到底有没有问题和隐患。
和lighttpd一样,nginx同样存在着开发文档很少的问题。最好的文档还是源码本身。
功能
Nginx完全不支持动态库so,所以它的模块都必须静态编译,且不能动态加载。要加载哪些模块,模块按照怎样的顺序执行,都是在编译期由 configure指定的,如果要调整,也只能重新编译一遍,无法通过改配置来实现。在这方面,Lighttpd做得比nginx好。Lighttpd支 持动态so,并且可以在配置文件中调整各模块的先后顺序,在某些应用场景下,调整模块的先后顺序是很有用的。
条件配置语法的灵活性,lighttpd比nginx要好一些。Lighttpd可以很方便地配置成这样:
$HTTP[“url”] =~ “…” {
Proxy-core.backends = (“10.1.1.1:8080”, “10.1.1.2:8080”, …)
Proxy-core.balancer = “round-robin”
Proxy-core.protocol = “http”
……
}
$HTTP[“host”] =~ “…” {
Access.deny-all = “enable”
}
$HTTP[“useragent”] =~ “…” {
url.redirect = (“” => “http://example.com/”)
url.redirect-code = 302
}
$HTTP[“url”] =~ “…” {
$HTTP[“querystring”] =~ “…” {
$HTTP[“referer”] =~ “…” {
…
}
}
}
在nginx中,如果模块本身没提供条件支持的话,需要依赖rewrite模块做一次内部跳转,把变化反映到url上,再通过location使其生效。
在一些具体的功能点上,nginx和lighttpd各有特点:
有一些比较细节的地方,nginx考虑得比lighttpd周全,比如nginx可以配置HTTP头部的长度、HTTP请求的读写超时 等,lighttpd的官方版本是不支持的,百度对此进行了改良。再例如nginx可以配置listen队列长度、nginx进程起来后 挂在哪个CPU核上运行,lighttpd现在还不支持。
Nginx的proxy功能比lighttpd强大,主要是proxy cache,另外还有一些细节上的处理。比如nginx支持4xx/5xx错误自动重试下一个后端。但是Lighttpd的proxy现在还支持scgi 和ajp两种后端转发协议,nginx不支持。
Nginx有一些比较有特色的功能module,例如:
1)secure_link,可以用来防盗链,目前在CDN上有应用。这个功能很不错,可以考虑在lighttpd上开发相应的模块。
2)geoip,用户给配置一个ip地理信息数据文件,nginx可以以此为根据,判断客户端ip来自哪个国家和城市。
性能
根据简单性能对比,Nginx的性能比lighttpd略好。原因可能有以下几方面:
1. Lighttpd启动了几个辅助线程,有加锁竞争行为,这样会使性能有所降低(线程个数是可配的,这里还有优化的余地);nginx完全不涉及线程,不加锁。
2. Lighttpd有动态so,nginx全静态编译,动态库执行效率比静态慢大约5%~10%左右。
3. Nginx在细节优化上可能做得更好一些。例如nginx的epoll是ET(边缘触发)的,而lighttpd的epoll是LT(水平触发)的。
nginx的性能要好一些,不过对大多数应用来说,lighttpd的性能指标已够用了,一个系统主要的瓶颈往往是在后端。由于lighttpd具有动态模块的加载能力,适合非常需要灵活配置的场合。
总体而言,nginx和lighttpd都是非常好的web server选择。
分享到:
相关推荐
三大WEB服务器对比分析(apache ,lighttpd,nginx) 分析的还不错
同时,了解和对比其他轻量级服务器如Lighttpd和Nginx的特点,可以帮助我们根据具体需求选择最适合的解决方案,以提高服务器性能和响应速度。对于大型网站或者需要高度可扩展性的系统来说,结合使用这些服务器可以...
这篇性能对比测试报告主要关注了三个主流的Web服务器——Apache、Nginx和Lighttpd在性能上的差异。测试的目的是为了评估这三款服务器在实际应用中的性能表现,为未来的项目选择提供依据。测试环境是在一台配置为8核...
1.4 Nginx与Apache、Lighttpd的综合对比 第2章 Nginx服务器的安装与配置 2.1 安装Nginx服务器所需要的系统资源 2.2 Nginx的下载 2.3 Nginx的安装 2.4 Nginx的启动、停止、平滑重启 2.5 Nginx的平滑重启 2.6 ...
### 三大Web服务器对比分析:Apache、Lighttpd与Nginx #### 一、概述 随着互联网技术的发展,Web服务器成为了构建网站不可或缺的核心组件之一。本文将对三种流行的Web服务器——Apache、Lighttpd与Nginx进行深入...
Nginx与Apache、Lighttpd的对比 在对比传统Web服务器时,Nginx显示出其性能和灵活性的优势。例如,与Apache相比,Nginx在处理静态文件请求上更为高效,且内存占用更低。而与Lighttpd相比,Nginx提供了更丰富的功能和...
- **与Lighttpd对比**:Lighttpd 同样轻量,但在负载均衡和反向代理方面,Nginx 更具优势。 7. **常见问题与解决** - **错误日志分析**:通过`error.log`文件定位并解决问题,如配置错误、权限问题等。 - **访问...
#### 1.4 Nginx与Apache、Lighttpd的综合对比 - **性能**:Nginx在处理静态内容方面性能最优;Apache通过多线程和多进程方式处理请求,适合复杂的应用场景;Lighttpd在轻量级应用中有很好的表现。 - **配置复杂度**...
2. **对比Lighttpd**:Nginx在反向代理和负载均衡方面功能更强大,但Lighttpd在资源消耗上可能更低。 总之,"nginx-1.5.7.zip"包含的Nginx 1.5.7版本是强大的Web服务器解决方案,尤其适合需要高性能、高并发处理的...
在本课程中,我们将深入探讨Nginx的相关知识,包括反向代理和正向代理的概念,常用Web服务器的对比,Nginx的安装部署,核心配置分析,虚拟主机配置,Location匹配规则,以及日志配置和切割处理。 首先,理解【反向...
在Web服务器领域,Apache、Lighttpd和Nginx是三种广泛应用的服务器软件,各自有着独特的特性和优势。下面将详细分析它们的特点。 1. Lighttpd Lighttpd是一个轻量级的Web服务器,以其低内存消耗、低CPU占用率和高...
- **Lighttpd**:Lighttpd是一款轻量级的Web服务器,以其高效能和低资源消耗而受到青睐。与Nginx类似,但Nginx在功能性和稳定性方面更为突出。 - **Tomcat**:Tomcat主要用于部署Java应用,虽然也可以作为Web服务器...
### 实战Nginx:取代Apache的高性能Web服务器 #### Nginx简介及选择理由 ...- **Nginx与Apache的Rewrite规则实例对比**:对比Nginx和Apache在处理相同需求时的rewrite规则差异,帮助理解两者之间的异同。
【Apache 与 Nginx 对比】 Apache 是传统的 Web 服务器,以其强大的模块化结构和广泛的社区支持而著名。然而,当面对大量并发请求时,Apache 的性能可能会下降,因为它使用的是多进程模型。相比之下,Nginx 使用...
Z-Blog PHP可以运行在Windows、Linux等众多平台上,支持PHP 5.2 - 5.6、PHP 7.0和HHVM,支持IIS、Apache、Lighttpd、Nginx、Kangle等Web服务器。 Z-Blog PHP同时支持MySQL(MariaDB)和SQLite双数据库。 2、Zblog ...