http://www.acme.com/software/thttpd/
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低。
一.安裝
# wget http://www.acme.com/software/thttpd/thttpd-2.25b.tar.gz
# tar zxvf thttpd-2.25b.tar.gz
# cd thttpd-2.25b
# ./configure --prefix=/usr/local/thttpd
# make
CentOS 6.4編譯報錯,原因是getline 已加入 POSIX 2008,可以把extras/htpasswd.c 裡面的getline重新命名為get_line或別的。
htpasswd.c中的名稱與stdio.h標準庫中的getline的名稱一樣,所以導致了衝突。
修改的方法是到htpasswd.c中,修改getline。htpasswd.c中getline是一個static類型的函數,函數只會出現在本檔案中。依次尋找getline,並修改成get_line。
htpasswd.c 第52行定義
static int getline(char *s, int n, FILE *f) {
htpasswd.c 第192行調用
while(!(getline(line,MAX_STRING_LEN,f))) {
重新make
#make
# addgroup www // 需建立 www 組 如果提示 addgroup: command not found
可以使用
# /usr/sbin/useradd www
# make install
make install的時候會報沒有/usr/local/man/man1的錯誤,所以要
# mkdir man1
# cd /usr/local/thttpd
# mkdir {etc,logs}
#cd ./conf
#vim thttpd.conf
port=80
user=www
host=0.0.0.0
logfile=/usr/local/thttpd/logs/thttpd.log
pidfile=/usr/local/thttpd/logs/thttpd.pid
#throttles=/usr/local/thttpd/etc/throttle.conf
#urlpat=*.txt|*.mp3
#charset=utf-8
dir=/usr/www
cgipat=/usr/local/thttpd/www/cgi-bin/*
啟動thttpd
# /usr/local/thttpd/sbin/thttpd -C /usr/local/thttpd/conf/thttpd.conf
查看進程是否啟動
# ps aux | grep thttpd
#vim throttle.conf
*.jpg|*.gif 50000 # 對所有 jpg gif 限速 5萬位元組每秒
*.mpg 20000 # 對訪問所有的 mpg 檔案限速 2萬位元組每秒
dir/* 20000 # 對訪問 dir/ 目錄下所有檔案限速 一秒鐘 2萬個位元組
php有 thttpd 編譯選項,可以作為thttpd模組,這樣就比nginx lighttpd 的 php-fpm 更節省資源,相應速度要快。但是目前 thttpd 對PHP的支援限於版本的要求,搜尋到有一達人有php5.2.11版本的補丁。
# wget http://download2.3tera.net/oss/files/osm/thttpd-2.25b/php-5.2.11-thttpd-2.25b.tar.bz2
# tar jxvf php-5.2.11-thttpd-2.25b.tar.bz2
# cd php-5.2.11
# ./configure --prefix=/usr/local/php-5.2.11 --with-thttpd=/usr/thttpd-2.25b
# make && make install
二.使用GDB調試thttpd
修改configure後的Makefile
預設是
CCOPT = -O2
修改為
CCOPT = -g -O0
還要修改thttpd.c
增加:
debug=1;
在
if ( ! debug )
之前
因為啟用debug,這樣就不會產生守護進程,不然不方便調試。
啟用thttpd
# /usr/local/thttpd/sbin/thttpd -C /usr/local/thttpd/conf/thttpd.conf
附加gdb進程
#gdb -p thttpd-pid
(gdb) break main
(gdb) r
(gdb) l
可見已經可以查看代碼,也可以列印變數。