广东 广州
最近几年,市场上出现了很多有趣的 Web 服务器实现,包括
lighthttpd、litespeed 和 mongrel 等。这些 Web
服务器都宣称结合了性能、易管理性、可移植性、安全性和其他相关价值。下面的工程研究将调查轻量级 Web
服务器,以帮助您选择最可能满足下一个项目的技术需求的 Web 服务器。
“轻量级” Web 服务器,例如 lighthttpd
、 litespeed
和 mongrel
,可以为项目带来很多的好处。本文调查这种可能性,并展示这些 Web 服务器的适用性。
一个 Web 服务器需要哪些东西?
第一个重要的方面是清楚地理解所调查的领域(请参阅 参 考资料
,以了解更详细的信息)。终端用户在 Internet 上的基本动作就是 “进入一个 Web 页面”。从大处讲,这牵涉到两个应用程序之间的协作:
- 一个 Web 浏览器,例如 Firefox 或 Internet Explorer,用于请求一个特定的页面,并且以人类可读的方式显示从另一个应用程序那里收到的内容。
- 一个 Web 服务器,通常是在远程机器上,负责对页面请求作出响应,返回 HTML 编码的或类似的数据流。
所有 Web 用户直接与浏览器交互,因此他们的选择和分析相应地有些狂热。而服务器只对站点的技术人员可见。根据 Netcraft
最近的调查,虽然存在很多不同的 Web 服务器,但是其中两种 Web 服务器就占据了 90% 的份额,这两种 Web 服务器是 Apache 和
Internet Information Server
(IIS)。它们都是经过高度锤炼的产品,并且声称不仅具有广泛的内在技术特性,而且有很多配套的书籍、增件、顾问、提供商等。那么,它们是否还有值得改
造的地方呢?
答案是肯定的。评价一个 Web 服务器的重要指标有:
- 性能
:对请求作出响应的速度有多快?
- 可伸缩性
:当很多用户同时访问它时,服务器还能继续可靠地运行吗?
- 安全性
:服务器是否只执行它应该执行的操作。它在认证用户和加密传输方面提供了怎样的支持?它的 使用是否使附近的应用程序或主机变得更易受攻击?
- 可靠性
:服务器的失效模式和故障发生率如何?
- 标准遵从性
:服务器遵从相关的 RFC 吗?
- 灵活性
:是否可以对服务器进行调优,以支持较重的请求负载、需要计算的动态页面或者代价不菲的认 证等等?
- 平台需求
:该服务器可用于哪些平台?它是否有特定的硬件需求?
- 易管理性
:服务器是否易于设置和维护?它是否与日志记录、审计、成本计算等组织标准兼容?
Apache 和 IIS 不能同时在那么多的标准方面做到最好。理论上讲,显然那些定向的产品至少能在以上的一至两个方面超越市场领头产品。
关于轻量级 Web 服务器的一件有趣的、值得调查的事情是,它们之间的竞争远远不止是理论上的:仔细研究表明,它们有很 多
东西可以提供,并且即使在很多常见的情况下,它们相对于 Apache 和 IIS
也坚持了自己的风格。虽然可以合理地认为市场领头产品已经经过了小心的优化,从而能够有效地在性能(举个例子)方面避免被击败,但是很多小型的竞争对手因
为只提供简单的静态 Web 页面服务,速度反而更快
。当使用这些 Web 服务器运行测试时,您会感觉好像是在赛道上驾驶一辆 go-kart 小车,不知不觉竟然超过了 Porsche 和 Viper 车。这还不是全部:有时候,轻量级 Web 服务器可作为那些大哥级服务器的有效补充
,而不只是与它们竞争。即使 您知道自己将使用 Apache,有时候通过将它与一个轻量级伙伴搭档,反而可以最大限度地利用它。最好的解决方案有时候需要两个或更多 Web 服务器的协作。
Web 服务的轻巧性
本调查中重点关注的 “轻巧性” 实际上是一种主观质量,就像 “艺术” 或 “风格”。它通常意味着简单、易于安装、流线化、要求低和健壮
—— 比 Apache 和 IIS 更小、更简单,当然,在试图满足大量市场的过程中,它们已经变得异常复杂。出于这个目的,虽然 Java Web
Server、AOLserver 和 Zeus 拥有迷人的可移植性和性能优势,但是它们的复杂性和大小使其不得不被拒之门外。
轻量级 Web 服务器可以适用于市场领头产品和其他 “重量级”
服务器无法胜任的情况。例如,整个服务器可以打包在一个文件中。这意味着开发人员可以方便地携带生产环境所需的所有工具。即使在生产服务器上运行的是
Apache,也仍然可以在宾馆的房间里,借助只需数秒钟就可以安装完毕的轻量级 Web 服务器以尝试新想法。而且,由于轻量级 Web
服务器要求很低,因此可以在那些无法负担 IIS 的主机上顺畅地运行。
单文件打包
小的、轻量级的 Web 服务器还可以在小功率的主机上良好地运行。在我们的公司(Phaseit —— 见 侧 栏
)
中,我们在远程的、条件欠佳或配置较低的环境中的工业计算机上运行专用的
硬件。在这些情况下,能够通过一个对处理能力或磁盘空间要求很低的应用程序来提供 Web 页面是一个很大的优势。这意味着我们的机器可以避免
Apache 的开发和处理能力所带来的开销,构建基于 Web 的管理控制台。
从某种程度上讲,几乎所有轻量级 Web 服务器都是开放源码的。如果我们需要某一款 Web 服务器所特有的行为,那么下面概述的一些 Web
服务器都非常小巧,易于理解,也易于增强,只有两个例外。这些 Web 服务器为嵌入 Web 服务的项目提供极好的原始材料,不管这些 Web
服务是在特殊的硬件中,还是在为在通用计算机上运行而设计的特定应用程序中。它们还广泛用于具有传统外观的 Web 站点:
- YouTube 依靠 lighttpd 快速交付归档的内容,例如视频;
- cdServe
运行 “German Woodworking Machinery and Tools” CD;
- LiteSpeed 宣扬它在
twitter、www.funnyoride.com、www.airliners.com、WordPress.com、
fanfiction.com、SlashGear、www.forumactif.com 和其他著名 Web 站点上担任的角色;
- OpenSUSE、RubyOnRails、MarkaBoo 和其他一些著名站点依赖于 Mongrel;
- demon.net、bluelight.com、mtv.com、The Drudge Report、garfield.com 等站点则使用 thttpd;
- 等等。
下面的例子说明了开发人员使用轻量级服务器的轻巧性:在我们公司,我们采用专门的硬件提供办公室电话解决方案。它基于定制 的、以传统的 Linux® 应用程序的形式运行的软件。只需一个附加文件和一点 init.d
配置,很容易添加一个强大的 “Web 控制台”,该 Web 控制台能提供硬件和软件的管理界面。 终端用户可以从任何浏览器中监视和配置他们的计算机,而不必安排专门的硬件连接或解决使用 “垂直” 硬件时常见的其他复杂性。
面向服务架构(SOA)被认为难以使用。在我们的经验中,SOA 至少有一部分这方面的缺点阻碍了 Web 服务的使用。我们利用轻量级 Web 服务来设置快速的 SOA,以进行演示。
轻量级服务器甚至可以用于生产数据中心,包括前面列出的 high-profile
站点。性能非常高的站点会将操作分开,从而最大限度地利用缓存、代理等技术。例如,一个基于 Apache 的站点可能采用一种这样的架构:通过小型的
Web 服务器从专用的文件系统提供缓慢变化的图片。终端用户看到的结果实际上是 Apache 和一个或多个辅助 Web
服务器通过协作得到的输出,它们各自担任自己擅长的角色。这样的安排可以以非常低的计算成本提供非 常
快的结果。
手段和目的
虽然轻量级 Web 服务器有很多共同之处,但是各有各的不同。大多数轻量级 Web 服务器是用 C
编写的,但是实践证明,有些其他实现语言也可以成功地用于实现服务器,对此我已经做了实验,这些语言包括
Erlang、Java、Lisp、Lua、Perl、Python 和 Tcl。如果其中有您喜欢的语言,那么也许可以找到适合您的 Web 服务器。
由于很多特定的原因,您可能会将目光投向某种 “不常见” 的语言:
- 教学:使用轻量级 Web 服务器来制定一个重要、但是并不太大的目标。这是获得使用某种语言的经验的好方法。
- 虽然用 C 编写的轻量级 Web 服务器大小为 10-50 KB,更高级的语言有 100 KB 到数 MB 的运行时,但整个 Web 服务器的源文件
可能只占几千个字节。这种 Web 服务器占用的空间很小,因此比 Apache 更易于与技术伙伴共享。
- 更高级的语言可以使实验更吸引人 —— 例如,添加一个新的 HTTP/1.1 特性可能只需几行源代码。这些轻量级服务器是非常方便的实验材料。
- 将 HTTP 服务器添加到已有的、用高级语言编写的应用程序中只需增加几行源代码。
Athana
可以作为这些主题的例子。它是用 Python 编写的 Web 服务器。它支持 HTTP 多部分(上传)、会话、 cookie 等。从 0.2.1 版开始,Athana 一直被编写在一个单独的、精心组织的源文件中。
如前所述,不同的轻量级 Web 服务器有着不同的优点,它们或多或少独立于编程语言。所有轻量级 Web 服务器都比 Apache 更小、更易于配置。与 Apache 相比,有些轻量级 Web 服务器更快,有些则快得多
。有些则强调安全性、重负载下的 从容性、可扩展性或者内存占有量。在任何情况下,都可以以一种不适用于 Apache 的方式彻底地理解这些服务器。
哪些特定的产品使这些可能性成为现实?即使只留意 “轻量级” 服务器,面对的也是一个很大的难于管理的产品集合。不过可以将它们按子类来划分:超轻型、关注安全型、支持特定语言型等等。
我特别喜欢其中的超轻型 Web 服务器,它们比 Apache 小得多
。如此小的应用程序可以直接记住, 系统地、严密地加以考虑,以证明
它们的安全性或可伸缩性。小型 Web 服务器包括:
- Cheetah Server
,用不到一千行的 C 代码编写而成。
- DustMote
,一 个非常
小的 Web 服务器,用一个大约 3000 字节的 Tcl 源文件实现。
- fnord
,大小 取决于平台和配置,不超过 20K。虽然很小,但是它支持虚拟主机、CGI 和 keep-alive。
- ihttpd
, 使用不到 800 行的 C 代码,包括 CGI,并通过
inetd
提供页面。
- im-httpd
, 非常小的服务器 —— 只有大约 7 KB,链接到
glibc
。而且它也非常快。
- mattows
, 支持 CGI,只有 600 行 C 代码。
- Scrinchy
,虽然很小,不到 30KB,但是支持多种脚本编制语言,包括一种特殊用途的、基于栈的 Sy 脚本语言。
- ZWS
演示了一个即使是使用 500 多行带足够注释的 zsh (!) 编写的应用程序 —— 在这里是一个 HTTP 0.9+ 服务器 —— 也可以有多强大。
体积小并不妨碍这些服务器被正式使用。例如,fnord 可以处理数千个同时进行的连接。
也许轻量级作为一个类别最令人印象深刻的成就是高性能服务器:
- cghttpd
是一个小型 Web 服务器,它被理解为使用 2.6 系列内核中可用的异步功能的一个试验品。
- darkhttpd
是一个快速的、单线程的 HTTP/1.1 服务器。
- Gatling
是为高性能设计的。它的特性包括 FTP、IPv6、虚拟主机、CGI 等。
- Kernux
是一个 Linux 内核模块,它实现了一个 HTTP 守护进程。
- lighttpd
是使用率排名第五的 Web 服务器(排名还在上升)。它为很多同时进行的连接进行了优化:“典型的场景是使用 lighttpd 作为一个下载(off-load)服务器,以提供静态内容……”
- LiteSpeed Web Server
是一款轻量级商业 Web 服务器,强调性能和安全性。 LiteSpeed Technologies 公司宣传为静态内容提速了 6 倍,在解释页面方面也有一定的提高。
- Miniature JWS
,也称 tjws,它是基于 Java 的 Web 服务器,可以处理 servlet、JSP 和数千个并发连接,而大小只有 77 KB。它的作者声称它 “比 Apache 2.x 快 10%”。
- Yaws
是用 Erlang 编写的一款高性能 HTTP/1.1 服务器。
有些 Web 服务器被实现为类或库,以便嵌入
到较大的应用程序中。 在这些 Web 服务器当中,我发现特别有趣的有:
- EHS
—— “嵌入式 HTTP 服务器”,被设计为一个 C++ 类,用于嵌入到较大的 C++ 应用程序;还有
- Embedded TCL Web Server
,它是一个很普通的 Web 服务器,支持 SSL 和 Basic Authentication,速度非常快 —— 其作者使它至少与 lighthttpd 和 AOLserver 一样快。它是用不到 100 行 Tcl 编写的。
Python 是几种适合不寻常环境的 Web 服务器的实现语言,这些 Web 服务器包括:
- cdServer 是一个小型的、用 Python 编写的 HTTP 服务器,它 “被设计用来提供来自 CD-ROM 的(静态)内容”
。它在提供动态内容方面能力有限。我们有几个涉及不受影响的 “live CDs” 的项目,在这些项目中像 cdServer 之类的工具很关键。
- edna
, 一款智能的用 Python 编写的 MP3 服务器,它是用 HTTP 实现的。
还有其他一些用 Perl 和其他不出名的语言编写的轻量级 Web 服务器:
- Camlserv
, 用 ocaml 编写的一个完整的 Web 服务器,目标是 “高度交互式的 Web 页面”。它由几千行 ocaml 编写而成,其中大部分代码都与 MySQL 和 HTML 的特殊处理有关。
- dhttpd
用和 Apache 相同的格式记录访问。它支持 CGI,并具有内建的 Perl 解释器、虚拟主机、IPv6、带宽管理和安全性等方面的特性。
- DNHTTPD
是用 Perl 编写的,用于 UNIX®。它支持虚拟主机、SSL 连接、CGI 等。
- Jellybean
是用 Perl 编写的基于 HTTP 的 Perl Object Server。
- lns.http
是一个 Common LISP HTTP/1.1 Web 框架。
- Mongrel
是用 Ruby 编写的、用于 HTTP 的一个库和服务器。
- Nanoweb
是用 PHP 编写的一款快速、健壮的 Web 服务器。它宣称具有丰富的特性,包括完全遵从 HTTP/1.1、访问控制、身份验证、虚拟主机、SSL 兼容性等。
- Naridesh
是用 Perl 编写的 Web 服务器。
- OpenAngel
是用 Perl 编写的。它强调的重点是安全性。
- Xavante
是用 Lua 编写的 HTTP/1.1 Web 服务器。
- XSP
是用 C# 编写的,用于运行 ASP.NET。
有时候您可能需要其他一些用 C 编写的、具有不常见的次要优势的轻量级 Web 服务器:
- ABYSS
可以在 UNIX 和 Win32 之间移植,其 “目的是成为完全遵从 HTTP/1.1 的 Web 服务器”。它占用的内存很少。
- Anti-Web HTTPD
(也称 “Anti-Web”、“awhttpd” 和 “AW”)是一款单进程、无线程、支持 CGI 的服务器,它强调安全性和简单性。
- MHTTPD
支持从外部文件或 LDAP 服务器进行的 MHTTPD Basic Authentication。
- mini-httpd
可以在一个系统线程中处理多个并发请求,但是在主机上占用的内存或 CPU 很少。
- Naken Web
类似于很多其他的轻量级服务器 —— 它支持 Basic Authentication、静态内容等 —— 但是它的作者将它设计为用于 Webcam 操作,并且在 Gumstix、WRT54GL、OpenWrt 和其他新的平台上运行。
- Null httpd
是一款多线程的、简单的、可移植的 Web 服务器。
- Seminole
是一款商业 Web 服务器,内存需求较小,功能较多。
- thttpd
throttle,支持
chroot
、 Basic Authentication 等。
结束语
Web 服务器远远不止是 Apache 和 IIS 的天下。您可以发现很多其他的 Web 服务器,它们很小,易于理解,但是又足够快,可以被正式使用。这样的 Web 服务器可以很好地加快您的下一个项目。
更多关于Lighttpd
的详细信息,或者下载地址请点这里
分享到:
相关推荐
本文将根据标题“轻量级Web服务器选择”及描述中的关键词进行展开,详细介绍几种常见的轻量级Web服务器及其特性,帮助开发者更好地了解并选择合适的轻量级Web服务器。 #### 一、轻量级Web服务器概述 轻量级Web...
【基于QT的轻量级web服务器】是一种在Linux环境下运行的、使用QT库开发的简易Web服务器。QT是一个跨平台的C++图形用户界面应用程序开发框架,它为开发者提供了丰富的API,使得构建桌面和移动应用变得更为便捷。在这...
### Nginx轻量级Web服务器搭建详解 #### 一、引言 在现代互联网服务领域,选择合适的Web服务器对于确保网站稳定运行至关重要。Nginx作为一种轻量级且高性能的Web服务器,不仅能够处理高并发请求,还支持多种语言...
ARM架构通常用于嵌入式设备和小型系统,因为它们在资源效率和功耗方面具有优势,而轻量级Web服务器则是这类系统的理想选择,因为它们可以在有限的硬件资源下运行。 描述中的“移植轻量WEB服务器程序,用于小系统,...
3. 基于TinyHTTP库构建轻量级Web服务器。 4. 解析HTTP请求,处理请求头和请求体。 5. 编写Makefile文件,自动化构建过程。 通过实践这个项目,你将对网络协议、服务器端编程和动态内容生成有更深入的理解。这是一个...
Lua语言在轻量级Web服务器设计中的应用 在当前计算机网络技术飞速发展的今天,Web服务已经成为最广泛使用的服务之一。Web服务器是提供Web服务的基础设施,当前存在许多不同的Web服务器,如Apache和IIS等。然而,...
nginx研究以及优化
Nginx是一款高性能的轻量级Web服务器软件,由俄罗斯程序员Igor Sysoev在2004年开始开发,其设计目的是提供一个用于HTTP、HTTPS和SMTP服务的稳定、高效的服务器。Nginx以其高性能、可靠性、易于配置及低系统资源消耗...
轻量级的的Web服务器(需要 FrameWork2.0+ 支持). 不需要安装Win IIS 或者Visua lStudio IDE,即可演示Asp.net程序. 只适合于本机测试,专用于毕业答辩演示ASP.net应用程序或者个人机器测试ASP.net程序。
在IT行业中,高并发轻量级Web服务器是一个关键的话题,特别是在构建高性能、可扩展的互联网应用时。这类服务器设计的主要目标是处理大量的并发连接请求,同时保持低内存占用和快速响应时间。以下将深入探讨这一领域...
【Lua语言在轻量级Web服务器设计中的应用】 Lua是一种轻巧、高效的脚本语言,因其易扩展性和良好的整合性而被广泛应用于各种领域。在轻量级Web服务器设计中,Lua的优势尤为突出。本文主要探讨了如何利用Lua与C语言...
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,...
Java中的Jetty是一个轻量级、高性能且可嵌入式的Web服务器和Servlet容器,它以其简单易用和高效性在开发社区中广受欢迎。本文将深入探讨Jetty的基本概念、特性以及如何在Java项目中使用它。 1. **Jetty简介** - ...
"极方便的轻量级Web服务器及源码" 指的是一种小型、高效且易于使用的Web服务器软件,它可能特别适合于开发、测试或部署简单的Web应用。这里的“轻量级”意味着它占用的系统资源较少,如内存和CPU,适合在资源有限的...
在Linux操作系统中,开发一款多线程轻量级HTTP服务器是一项技术挑战,它涉及到网络编程、多线程处理以及对HTTP协议的理解。本项目“Linux下多线程轻量级HTTP服务器”旨在实现一个基本的HTTP服务器,能够响应客户端的...
基于轻量级Web服务器的电能量配置方法是一种现代技术,旨在优化电力使用,提高能效,同时减少运维复杂性和成本。这种技术通常应用于智能家居、智能电网以及各种物联网(IoT)设备中。 轻量级Web服务器是指那些资源...
ArchLinux下轻量级c++服务器,根据Tinywebserver和《Linux高性能服务器编程》中的HTTP服务器升级而来.zipArchLinux下轻量级c++服务器,根据Tinywebserver和《Linux高性能服务器编程》中的HTTP服务器升级而来....
【TinyWebServer-raw_version_RAW_轻量级web服务器_TinyWebServer】是一个专为网络新手设计的项目,旨在帮助用户理解并实现一个基础的、轻量级的Web服务器。这个项目采用Linux作为开发环境,因此它基于Unix-like系统...
MyWebServer是一个高性能、易用、小巧、绿色的轻量级WEB服务器软件,是你快速建站及个人HTTP文件服务器的难得工具。支持HTTP/1.1、断点续传、大文件下载、正则表达式URL重写、虚拟目录、HTTP反向代理等,可通过ISAPI...