thttpd 说明
Table of Contents
- 1. 安装
- 2. 配置
- 3. 启动
- 4. 调试
- 5. 使用经验
- 5.1. 如果配置文件有chroot设置,则C语言版本的 cgi程序 必须静态编译。
- 5.2. 测试一下thttpd所需要的动态库,readelf -d thttpd
- 5.3. 配置文件中的user应该指定成系统中有的某个user。
- 5.4. cgipat=/cgi-bin/** 两个*表示目录下的子目录也可以执行cgi程序。
- 5.5. printf("%s%c%c ","Content-Type:text/html",13,10) 一个cgi程序必须在最开始 添加这句话,才能在页面中正常显示。
- 5.6. cgi程序中经常用到的变量
- 5.6.1. HTTP-REFERER:调用该CGI程序的网页的URL
- 5.6.2. REMOTE-HOST:调用该CGI程序的Web浏览器的机器名和域名
- 5.6.3. REQUEST-METHOD:当Web服务器传递数据给CGI程序时所采用的方法,分为GET和POST两种。GET方法仅通过环境变量(如QUERY-STRING)传递数据给CGI程序,而POST方法通过环境变量和标准输入传递数据给CGI程序,因此POST方法可较方便的传递数据给CGI程序。
- 5.6.4. SCRIPT—NAME:该CGI程序的名称
- 5.6.5. QUERY-STRING:当使用POST方法时,Form中的数据最后放在QUERY-STRING中,传递给CGI程序
- 5.6.6. CONTENT-TYPE:传递给CGI程序数据的MIME类型,通常为"application/x-www-form-url-encoded",它是html form中以POST方法传递数据给CGI程序的数据编码类型,成为URL编码类型。
- 5.6.7. CONTENT-LENGTH: 传递给CGI程序的数据字符数(字节数)
- 5.7. 页面form提交的信息是经过编码的。需要解码。
1 安装
# 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
一般编译的时候会报错,修改extras/htpasswd.c 里面的getline重命名为getline或别的。 文件中有2个getline都需要改。
make install的时候会报没有/usr/local/man/man1的错误,所以要
# mkdir man1
2 配置
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/*
把以上代码写到一个文件中即可。 这个是基本配置
3 启动
# /usr/local/thttpd/sbin/thttpd -C /usr/local/thttpd/conf/thttpd.conf
查看进程是否启动
# ps aux | grep thttpd
另一个方法
thttpd -p 80 -d /home/httpd/html -u root 启动
4 调试
二.使用GDB调试thttpd 修改configure后的Makefile 默认是 CCOPT = -O2 修改为 CCOPT = -g -O0
还要修改thttpd.c 增加: debug=1; 在 if ( ! debug ) 之前
因为启用debug,这样就不会生成守护进程,不然不方便调试!
启用thttpd
附加gdb进程 #gdb -p thttpd-pid (gdb) break main (gdb) r (gdb) l
5 使用经验
5.1 如果配置文件有chroot设置,则C语言版本的 cgi程序 必须静态编译。
5.2 测试一下thttpd所需要的动态库,readelf -d thttpd
5.3 配置文件中的user应该指定成系统中有的某个user。
5.4 cgipat=/cgi-bin/** 两个*表示目录下的子目录也可以执行cgi程序。
5.5 printf("%s%c%c ","Content-Type:text/html",13,10) 一个cgi程序必须在最开始 添加这句话,才能在页面中正常显示。
5.6 cgi程序中经常用到的变量
5.6.1 HTTP-REFERER:调用该CGI程序的网页的URL
5.6.2 REMOTE-HOST:调用该CGI程序的Web浏览器的机器名和域名
5.6.3 REQUEST-METHOD:当Web服务器传递数据给CGI程序时所采用的方法,分为GET和POST两种。GET方法仅通过环境变量(如QUERY-STRING)传递数据给CGI程序,而POST方法通过环境变量和标准输入传递数据给CGI程序,因此POST方法可较方便的传递数据给CGI程序。
5.6.4 SCRIPT—NAME:该CGI程序的名称
5.6.5 QUERY-STRING:当使用POST方法时,Form中的数据最后放在QUERY-STRING中,传递给CGI程序
5.6.6 CONTENT-TYPE:传递给CGI程序数据的MIME类型,通常为"application/x-www-form-url-encoded",它是html form中以POST方法传递数据给CGI程序的数据编码类型,成为URL编码类型。
5.6.7 CONTENT-LENGTH: 传递给CGI程序的数据字符数(字节数)
5.7 页面form提交的信息是经过编码的。需要解码。
一般来说是: