1.
thttpd是一个非常小巧的轻量级web server,它非常非常简单,仅仅提供了HTTP/1.1和简单的CGI支持,在其官方网站上有一个与其他web server(如Apache, Zeus等)的对比图+Benchmark,可以参考参考。此外,thttpd 也类似于lighttpd,对于并发请求不使用fork()来派生子进程处理,而是采用多路复用(Multiplex)技术来实现。因此效能很好。
Thttpd支持多种平台,如FreeBSD, SunOS, Solaris, BSD, Linux, OSF等。对于小型web server而言,速度快似乎是一个代名词,通过官方站提供的Benchmark,可以这样认为:thttpd至少和主流的web server一样快,在高负载下更快,因为其资源占用小的缘故。
Thttpd还有一个较为引人注目的特点:基于URL的文件流量限制,这对于下载的流量控制而言是非常方便的。象Apache就必须使用插件实现,效率较thttpd低。
2.
Structure of a CGI Script
Here's the typical sequence of steps for a CGI script:
Read the user's form input.
Do what you want with the data.
Write the HTML response to STDOUT.
具体参考网络文章。CGI Made Really Easyhttp://www.jmarshall.com/easy/cgi/
公共网关界面(CGI)是一种编程标准,它规定了Web服务器调用其它可执行程序(CGI程序)的接口协议标准。CGI程序通过Web服务器与运行Web服务器调用其它可执行程序交互,它接受Web浏览器发送给Web服务器的信息,并进行处理,然后将结果再送给Web服务器及Web浏览器。CGI程序可以用任何程序设计语言编写,如Shell、perl、C、Java等,用C语言编写的CGI程序具有速度快、安全性高等特点。
CGI程序通常用于加入查询机制、搜索机制、交互式应用及其它一些应用。
3.
1)
2)
3)
4)
5)
6)
7)
8)
THTTPD 支持将配置信息写入thttpd可执行文件,此时需要在./configure 添加编译选项,THTTPD也支持将配置信息通过执行参数输入到执行环境。最好用配置文件。
4.
1)
什么是chroot?chroot基本上重定义了一个程序的运行环境。更确切地说,它重定义了一个程序(或登录会话)的"ROOT"目录或"/"。也就是说,对于chroot了的程序或shell来说,chroot环境之外的目录是不存在的。
那这样又有什么用呢?如果入侵者入侵了你的电脑,他们就不能看见你系统里所有的文件了。这样,就限制了入侵者可能执行的命令,从而禁止了他们溢出不安全文件的机会。但唯一的缺点是,我认为这不能阻止他们察看网络连接和其他资料。因此,你应做一些本文未深入涉及的事情:
l
l
l
l
l
l
Chroot功能保证系统安全性,但是对于CGI程序的执行环境进行限制,比如.c程序必须编译成-static。而perl 等解释语言的解释器同样必须放在chroot 目录.下面以sh脚本解释器为例说明此解决办法:
参考 Lightweight Web Serving with thttpd
# cd /home/www
# mkdir bin
# cp /bin/sh bin
# ldd bin/sh
bin/sh:
# mkdir lib
# cp /lib/libedit.so.2 lib
# cp /lib/libtermcap.so.0 lib
# cp /lib/libc.so.12 lib
# mkdir libexec
# cp /libexec/ld.elf_so libexec
# chown -R root:wheel bin lib libexec
Depending on the applications you need inside the chroot, things will get more complicated: you may need to create device files, a user database, pipes, and so on.
2)
-static
把一些函数都静态的编译到程序中,而无需动态链接了。
3)
# dir=/usr/local/www/
#chroot
#cgipat=/cgi-bin/*
#logfile=/usr/local/www/logs/thttpd_log
#pidfile=/var/run/thttpd.pid
5.
核心部分如何将web的get/post与 CGI程序 的stdin 关联,以及web的内容和stdout关联。