五大开源 Web 服务器

3 位读者喜欢这篇文章。
System statistics with sar and the /proc filesystem

ajmexico。由 Jason Baker 修改。CC BY-SA 2.0。

统计数据表明,超过 80% 的 Web 应用程序和网站由开源 Web 服务器驱动。在本文中,我将介绍最流行的开源 Web 服务器,并简要回顾它们的历史、技术、功能等。我还将提供一些技巧,以便您可以轻松部署其中一个流行的 Web 服务器。

根据 维基百科,Web 服务器是“通过 HTTP 处理请求的计算机系统,HTTP 是用于在万维网上分发信息的基本网络协议。该术语可以指整个系统,或特指接受和监督 HTTP 请求的软件。” 在本文中,我们讨论的是专门处理最终用户 Web 请求的软件。

Apache HTTP 服务器

Apache HTTP 服务器(通常称为 httpd,或简称 Apache)于 1995 年首次发布,并在 2015 年 2 月庆祝了其 20 周年。Apache 为全球 52% 的网站 提供支持,是迄今为止最流行的 Web 服务器。

虽然 Apache httpd 最常见于在 Linux 上运行,但您也可以在 OS X 和 Windows 上部署 Apache。毫不奇怪,Apache 是在 Apache License version 2 下获得许可的。Web 服务器本身使用模块化架构,其中可以加载额外的模块来扩展其功能。例如,加载 mod_proxy 将允许在您的服务器上使用代理/网关,而 mod_proxy_balancer 将为所有受支持的协议启用负载均衡。从 2.4 版本开始,Apache 还通过一个新模块 mod_http2 支持 HTTP/2。

由于 Apache HTTP 服务器自 1996 年以来一直是​​最流行的 Web 服务器,因此它“受益于出色的文档和来自其他软件项目的集成支持”。您可以在 Apache 基金会 项目页面上找到更多信息。

NGINX

Igor Sysoev 早在 2002 年就开始开发 NGINX,并于 2004 年首次公开发布。NGINX 的开发是为了解决所谓的 C10K 问题,这是“如何设计一个可以处理一万个并发连接的 Web 服务器?”的简写。NGINX 在使用率最高的开源 Web 服务器列表中排名第二,运行着略高于 30% 的网站

NGINX 依靠异步事件驱动架构来帮助实现其处理大量并发会话的目标。由于其轻量级的资源利用率和易于扩展的能力,它已成为管理员中非常流行的 Web 服务器。

NGINX 在类似 BSD 的许可证下发布,不仅可以部署为 Web 服务器,还可以部署为代理服务器或负载均衡器。您可以在 NGINX 社区站点上找到更多信息。

Apache Tomcat

Apache Tomcat 是一个开源 Java servlet 容器,用作 Web 服务器。Java servlet 是一个 Java 程序,它扩展了服务器的功能。虽然 servlet 可以响应任何类型的请求,但它们最常实现托管在 Web 服务器上的应用程序。这种 Web servlet 是 Java 中与其他动态 Web 内容技术(如 PHP 和 ASP.NET)相对应的技术。Tomcat 的代码库于 1999 年由 Sun Microsystems 捐赠给 Apache 软件基金会,并于 2005 年成为顶级的 Apache 项目。目前,它为略低于 1% 的网站 提供支持。

Apache Tomcat 在 Apache License version 2 下发布,通常用于运行 Java 应用程序。但是,它可以与 Coyote 扩展,以执行普通 Web 服务器的角色,该服务器将本地文件作为 HTTP 文档提供。更多信息可以在 项目网站上找到。

Apache Tomcat 通常与其他开源 Java 应用程序服务器一起列出。一些示例是 JBossWildflyGlassfish

Node.js

Node.js 是一个服务器端 JavaScript 环境,用于网络应用程序,例如 Web 服务器。Node.js 的市场份额较小,为 0.2% 的网站 提供支持。Node.js 最初由 Ryan Dahl 于 2009 年编写。Node.js 项目由 Node.js 基金会管理,由 Linux 基金会的协作项目计划推动。

Node.js 与其他流行的 Web 服务器之间的区别在于,它主要是一个跨平台运行时环境,用于构建网络应用程序。Node.js 应用事件驱动架构,能够进行异步 I/O。这些设计选择优化了 Web 应用程序的吞吐量和可伸缩性,从而可以运行实时通信和浏览器游戏。Node.js 还突出了 Web 开发堆栈的差异,其中 Node.js 显然是 HTML、CSS 和 JavaScript 堆栈的一部分,而 Apache 或 NGINX 是许多不同软件堆栈的一部分。

Node.js 在 多种许可证下发布;更多信息可在 项目网站上获得。

Lighttpd

Lighttpd(发音为“lightly”)于 2003 年 3 月首次发布。目前,它为大约 0.1% 的网站 提供支持,并在 BSD 许可证下分发。

Lighttpd 以其低内存占用、小 CPU 负载和速度优化而著称。它使用事件驱动架构,针对大量并行连接进行了优化,并支持 FastCGI、SCGI、Auth、输出压缩、URL 重写和更多功能。Lighttpd 是 Catalyst 和 Ruby on Rails Web 框架的流行 Web 服务器。在 项目主页上查找更多信息。

提示

如果您想尝试其中一个流行的 Web 服务器,我强烈建议您下载 LAMP(Linux、Apache、MySQL、PHP)或 LEMP(Linux、NGINX、MySQL、PHP)堆栈。LAMP(Linux、Apache、MySQL、PHP)或 LEMP(Linux、NGINX、MySQL、PHP)堆栈有很多这样的堆栈可用,例如,在 Apache 和 PHP 版本中提供不同的风格。它们通常作为一键安装程序提供,或者在您的 Linux 上的软件包/软件管理器中可用。

成功完成安装过程后,您可以启动您的 Web 服务器,并尝试一个 Hello World 示例。这是开始了解您的 Web 服务器的来龙去脉以及 Web 服务器更广泛的工作原理的好方法。

总结

这绝不是 Web 服务器的详尽列表。我已经列出了一些最流行的 Web 服务器,并研究了它们支持的技术。如果您对更多细节感兴趣,特别是 Apache 和 NGINX 的区别,我建议您阅读这篇关于选择 Web 服务器的 实际考虑的文章。

当然,我们一直很好奇您为 Web 开发或托管需求选择了哪个 Web 服务器。请在评论中告诉我们。

Avatar
前 Opensource.com 和开放组织版主/大使。

12 条评论

很棒的文章,Robin。我的大部分经验都来自 Apache。我最早在 1998 或 1999 年左右在 Windows 上开始使用它。当我在 2001 年开始使用 Linux 时,我将之前的安装切换到该操作系统,并且从那时起部署了很多次。我尝试过 NGINX 和 lighttpd,但从未在生产环境中使用过。

几年前,当仍然使用带有 mod_php 的 apache prefork 时,我研究了 nginx 和 fastcgi。与此同时,我研究了使用带有 php-fpm (fastcgi) 的事件 mpm 来推进 apache httpd。

在我的基准测试中,毫无疑问:apache 击败了 nginx,并且更加稳定。

围绕 nginx 性能改进的所有炒作似乎都是将其与带有 mod_php 的 prefork apache 进行比较。我从未见过诚实的苹果对苹果的基准测试。我应该发布我的发现,但我只是一个无名小卒,甚至没有博客。

很棒的文章。我在 Lighttpd 上获得了一些乐趣。它太轻了。哇,谢谢。

Caddy Webserver 是一个新的,具有自动 TLS 功能。
https://caddyserver.com.cn

不一定是“现成的”解决方案,但如果您正在设计一些基于 HTTP 的应用程序,则值得考虑:AWS(Ada Web Server,与 Amazon 无关...只是一个不幸的首字母缩写冲突),它是一个库(用 Ada 编写),实现了 HTTP 服务器,可用于实现从简单的“页面服务”服务器到复杂的 HTTP 应用程序。

请参阅 http://libre.adacore.com/tools/aws/

感谢您提到 Ada Web Server,很高兴看到它们“老大哥”的替代品。

回复 作者:rpr

好文章,Robin。做得好!
我只想在列表中添加第六个 Web 服务器:Jetty。虽然是 Tomcat 的一种衍生产品,但它很轻巧,不需要太多定制。但它仍然是一个很棒的 Web 服务器,您可以使用它来制作原型、测试甚至部署生产阶段的应用程序。

你好 Hugo。

感谢您的建议。我将列表限制为前 5 名。它看起来确实很有趣,具有所有支持,并且在 Eclipse 基金会的保护伞下。

回复 作者:Hugo Tavares (未验证)

虽然它不是生产 Web 服务器,但对于开发人员来说,一个简化的桌面替代方案是 http://fenixwebserver.com。主要功能:通过 SSH 隧道进行一键协作。免责声明:我是作者。即将发布的版本将是第一个包含 localhost SSL 支持的本地证书颁发机构的版本(这是开发使用 power API(如地理位置)的移动 Web 应用程序的关键功能)。

谢谢 Corey,这看起来很有趣,特别是对于本地开发。

回复 作者:Corey (未验证)

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.