Webserver 简介

2016-03-23 linux network

简单介绍一下 webserver,其中很大一部分是关于一些小型软件的介绍。

简介

一个应用服务器很大一部分操作是处理 http 协议相关的内容,通常一个 Web 应用的基本操作是:

  1. 浏览器发送一个 HTTP 请求;
  2. 服务器收到请求,生成一个 HTML 文档;
  3. 服务器把 HTML 文档作为 HTTP 响应的 Body 发送给浏览器;
  4. 浏览器收到 HTTP 响应,从 HTTP Body 取出 HTML 文档并解析显示。

最简单的方式就是事先生成 HTML,并用文件保存;然后通过一个现成的 HTTP 服务器接收用户请求,并从文件中读取 HTML 返回给客户端。这也就是常见的静态服务器的处理逻辑,如 Apache、Nginx、Lighttpd 等。

如果要动态生成 HTML 就需要有相关的软件实现,而对于接受、解析、发送 HTTP 请求,可以直接通过现有的程序处理,而不是还没开始写动态 HTML,就需要用很长时间读 HTTP 规范,然后再实现业务逻辑。

常见 Web Server

常见的 Web 服务器有 Apache、Microsoft 的 Internet Information Server,IIS ;以及一些其它的小型服务器,包括了 lighttpd、thttpd、shttpd、micro_httpd、mini_httpd、miniweb。

简单介绍一下一些常见的小型服务器。

micro_httpd

really small HTTP server

这个 httpd 适合简单的 Web Server 编写学习,它只有一个简单的框架,只能够处理简单的静态页,可以考虑用来放静态页。

  • 支持安全的 .. 上级目录过滤
  • 支持通用的 MIME 类型
  • 支持简单的目录
  • 支持目录列表
  • 支持使用 index.html 作为首页
  • Trailing-slash redirection
  • 程序总共代码才 200 多行

详细的内容可以直接参考官方网站 http://www.acme.com/software/micro_httpd/

mini_httpd

small HTTP server

mini_httpd 也是相对比较适合学习使用,大体实现了一个 Web Server 的功能,支持静态页和 CGI,能够用来放置一些个人简单的东西,不适宜投入生产使用。

  • 支持 GET、HEAD、POST 方法
  • 支持 CGI 功能
  • 支持基本的验证功能
  • 支持安全 .. 上级目录功能
  • 支持通用的 MIME 类型
  • 支持目录列表功能
  • 支持使用 index.html, index.htm, index.cgi 作为首页
  • 支持多个根目录的虚拟主机
  • 支持标准日志记录
  • 支持自定义错误页
  • Trailing-slash redirection

详细的内容可以直接参考官方网站 http://www.acme.com/software/thttpd/

lighttpd

light footprint + httpd = LightTPD

Lighttpd 是一个德国人领导的开源软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的 web server 环境。具有非常低的内存开销,CPU 占用率低,效能好,以及丰富的模块等特点。

这是众多开源轻量级的 web server 中较为优秀的一个,支持 FastCGI、CGI、Auth、输出压缩、URL 重写、Alias 等重要功能。

Lighttpd 采用了 Multiplex,代码经过优化,体积非常小,资源占用很低,而且响应速度相当快。

Lighttpd 适合静态资源类的服务,比如图片、资源文件、静态 HTML 等等的应用,性能应该比较好,同时也适合简单的 CGI 应用的场合。

详细的内容可以直接参考官方网站 http://www.lighttpd.net/

thttpd

tiny/turbo/throttling HTTP server

thttpd 中是一个简单、小型、轻便、快速和安全的 http 服务器。

thttpd 同样是采用多路复用实现,支持基于 URL 的文件流量限制,这对于下载的流量控制而言是非常方便的。适合静态资源类的服务,比如图片、资源文件、静态 HTML 等等的应用,性能应该比较好,同时也适合简单的 CGI 应用的场合。

详细的内容可以直接参考官方网站 http://www.acme.com/software/thttpd/

SHTTPD

Simple HTTPD

Shttpd 是另一个轻量级的 web server,具有比 thttpd 更丰富的功能特性,支持 CGI、SSL、cookie、MD5 认证, 还能嵌入到现有的软件里,不需要配置文件。可以非常容易的开发嵌入式系统的 web server,官方网站上称 shttpd 如果使用 uclibc/dielibc(libc的简化子集) 则开销将非常非常低。

  • 小巧、快速、不膨胀、无需安装、简单的 40KB 的可执行文件,随意运行
  • 支持 GET, POST, HEAD, PUT, DELETE 等方法
  • 支持 CGI, SSL, SSI, MD5 验证, resumed download, aliases, inetd 模式运行
  • 标准日志格式
  • 非常简单整洁的嵌入式 API
  • 容易定制运行在任意平台:Windows, QNX, RTEMS, UNIX, BSD, Solaris, Linux

由于 shttpd 可以轻松嵌入其他程序里,因此 shttpd 是较为理想的 web server 开发原形,开发人员可以基于 shttpd 开发出自己的 webserver!

详细的内容可以直接参考官方网站 http://shttpd.sourceforge.net/

MiniWeb

small and elegent

通过 C 语言实现的 HTTP 服务器,支持 GET/POST 请求,支持授权,动态内容,支持压缩,在 X86 上最小 20KB,除此之外还支持 VOD (video-on-demand) 。

详细的内容可以直接参考官方网站 http://miniweb.sourceforge.net/

micro_httpd

micro_httpd 是一个轻量级的 http 服务器, micro_httpd 从 xinetd 运行,适用于负载较小的网站,可以从 www.acme.com 下载。

实现了 http 服务器的一些基本特征功能:

  • 文件名探测以保证安全;
  • 常用 MIME 类型识别;
  • Trailing-slash 重定向;
  • index.html 首页的处理。

安装/配置

1. 下载,安装。

源码可以从 www.acme.com 下载,或者 本地保存版本,解压、编译、安装。

$ make
$ make install

2. 配置/etc/services文件

假设我们的 micro_httpd 将使用 8000 端口,先搜一下有没有使用 8000 端口的,如果有则注释掉并追加 micro_httpd 。

$ cat /etc/services
micro_httpd     8000/tcp
micro_httpd     8000/udp

3. 建立xinetd守护文件

如果你的系统没有 /var/www/html 目录,自行创建或者改成你期望的已经存在的目录。

$ cat /etc/xinetd.d/micro_httpd
service micro_httpd
{
    socket_type   = stream
    protocol      = tcp
    wait          = no
    user          = root
    server        = /usr/local/sbin/micro_httpd
    server_args   = /var/www/html
    disable       = no
    flags         = IPv4
}

4. 重启xinetd

通过如下命令重启。

# /etc/init.d/xinetd start

5. 测试

创建一个测试网页/var/www/html/index.html。

# echo "hello" > /var/www/html/index.html

在浏览器里输入 http://ip:8000/index.html 。

当然通过 xinetd 可以进行一些配置。