thttpd安装与调试

http://www.acme.com/software/thttpd/thttpd是一个非常小巧的网络
强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码

 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

可见已经可以查看代码,也可以打印变量。

本文来源21aspnet,由架构君转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处:https://javajgs.com/archives/2171

发表评论