我的openwrt学习笔记(二十九)webserver之 thttpd
来源:互联网 发布:knockout.js 中文网 编辑:程序博客网 时间:2024/05/21 08:49
我的openwrt学习笔记(二十八)webserver之thttpd
thttpd WEBSERVER安装
thttpd - tiny/turbo/throttling HTTP server
thttpd中是一个简单,小型,轻便,快速和安全的http服务器:
简单:它能够支持HTTP/1.1协议标准,或者超过了最低水平
小巧:它具有非常少的运行时间,因为它不fork子进程来接受新请求,并且非常谨慎的分配内存(性能对比表:http://www.acme.com/software/thttpd/benchmarks.html)
便携:它能够在大部分的类Unix系统上运行,包括FreeBSD, SunOS 4, Solaris 2, BSD/OS, Linux, OSF等等
快速:它的速度要超过主流的Web服务器(Apache, NCSA, Netscape),在高负载情况下,它要快的多
安全:它努力的保护主机不受到攻击,不中断服务器
thttpd 类似于lighttpd,对于并发请求不使用fork()来派生子进程处理,而是采用多路复用(Multiplex)技术来实现。因此效能很好。同时它还有一个特点就是基于URL的文件流量限制,这对于下载的流量控制而言是非常方便的。象Apache就必须使用插件实现,效率较thttpd低。
thttpd跟lighttpd类似,适合静态资源类的服务,比如图片、资源文件、静态HTML等等的应用,性能应该比较好,同时也适合简单的CGI应用的场合。
官方地址:http://www.acme.com/software/thttpd
下载地址:http://www.acme.com/software/thttpd/thttpd-2.25b.tar.gz
一.安装
# wget http://www.acme.com/software/thttpd/thttpd-2.25b.tar.gz
# tar zxvf thttpd-2.25b.tar.gz
# cd thttpd-2.25b
linux@ubuntu:~/linux_c/thttpd/thttpd-2.25b$ ./configure --version
configure generated by autoconf version 2.13
linux@ubuntu:~/linux_c/thttpd/thttpd-2.25b$ ./configure --prefix=/usr/local/thttpd
linux@ubuntu:~/linux_c/thttpd/thttpd-2.25b$ make
….
htpasswd.c:52:12: error: conflicting types for ‘getline’
/usr/include/stdio.h:675:20: note: previous declaration of ‘getline’ was here
htpasswd.c: In function ‘main’:
htpasswd.c:216:11: warning: ignoring return value of ‘system’, declared with attribute warn_unused_result [-Wunused-result]
htpasswd.c: In function ‘add_password’:
htpasswd.c:117:2: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result]
make[1]: *** [htpasswd.o] Error 1
make[1]: Leaving directory `/home/linux/linux_c/thttpd/thttpd-2.25b/extras'
make: *** [subdirs] Error 2
修改方法:
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
linux@ubuntu:~/linux_c/thttpd/thttpd-2.25b$ make
…
E_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_TM_GMTOFF=1 -DHAVE_INT64T=1 -DHAVE_SOCKLENT=1 -I..-DWEBDIR=\"/usr/local/thttpd/www\" -c htpasswd.c
htpasswd.c: In function ‘main’:
htpasswd.c:216:11: warning: ignoring return value of ‘system’, declared with attribute warn_unused_result [-Wunused-result]
htpasswd.c: In function ‘add_password’:
htpasswd.c:117:2: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result]
gcc -static htpasswd.o -o htpasswd -lcrypt
make[1]: Leaving directory `/home/linux/linux_c/thttpd/thttpd-2.25b/extras'
linux@ubuntu:~/linux_c/thttpd/thttpd-2.25b$ file thttpd
thttpd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x4be9c679d8707115a3c4c9bba60dea3b7bffac2b, not stripped
linux@ubuntu:~/linux_c/thttpd/thttpd-2.25b$ make install
mkdir -p /usr/local/thttpd/sbin
mkdir: cannot create directory `/usr/local/thttpd': Permission denied
make: [installthis] Error 1 (ignored)
/usr/bin/install -c -m 555 -o bin -g bin thttpd /usr/local/thttpd/sbin
/usr/bin/install: cannot create regular file `/usr/local/thttpd/sbin': No such file or directory
make: *** [installthis] Error 1
linux@ubuntu:~/linux_c/thttpd/thttpd-2.25b$ sudo make install
[sudo] password for linux:
mkdir -p /usr/local/thttpd/sbin
/usr/bin/install -c -m 555 -o bin -g bin thttpd /usr/local/thttpd/sbin
mkdir -p /usr/local/thttpd/man/man8
/usr/bin/install -c -m 444 -o bin -g bin thttpd.8 /usr/local/thttpd/man/man8
for i in cgi-src extras ; do ( \
cd $i ; \
pwd ; \
make \
WEBDIR=/usr/local/thttpd/www \
CGIBINDIR=/usr/local/thttpd/www/cgi-bin \
MANDIR=/usr/local/thttpd/man \
WEBGROUP=www \
install \
) ; done
/home/linux/linux_c/thttpd/thttpd-2.25b/cgi-src
make[1]: Entering directory `/home/linux/linux_c/thttpd/thttpd-2.25b/cgi-src'
mkdir -p /usr/local/thttpd/www/cgi-bin
rm -f /usr/local/thttpd/www/cgi-bin/redirect
cp redirect /usr/local/thttpd/www/cgi-bin/redirect
rm -f /usr/local/thttpd/man/man8/redirect.8
cp redirect.8 /usr/local/thttpd/man/man8/redirect.8
rm -f /usr/local/thttpd/www/cgi-bin/ssi
cp ssi /usr/local/thttpd/www/cgi-bin/ssi
rm -f /usr/local/thttpd/man/man8/ssi.8
cp ssi.8 /usr/local/thttpd/man/man8/ssi.8
rm -f /usr/local/thttpd/www/cgi-bin/phf
cp phf /usr/local/thttpd/www/cgi-bin/phf
make[1]: Leaving directory `/home/linux/linux_c/thttpd/thttpd-2.25b/cgi-src'
/home/linux/linux_c/thttpd/thttpd-2.25b/extras
make[1]: Entering directory `/home/linux/linux_c/thttpd/thttpd-2.25b/extras'
rm -f /usr/local/thttpd/sbin/makeweb /usr/local/thttpd/sbin/htpasswd /usr/local/thttpd/sbin/syslogtocern
cp makeweb /usr/local/thttpd/sbin/makeweb
chgrp www /usr/local/thttpd/sbin/makeweb
chgrp: invalid group: `www'
make[1]: *** [install] Error 1
make[1]: Leaving directory `/home/linux/linux_c/thttpd/thttpd-2.25b/extras'
make: *** [installsubdirs] Error 2
增加组
linux@ubuntu:~/linux_c/thttpd/thttpd-2.25b$ cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:linux
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:linux
floppy:x:25:
tape:x:26:
sudo:x:27:linux
audio:x:29:pulse
dip:x:30:linux
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:
sasl:x:45:
plugdev:x:46:linux
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
libuuid:x:101:
crontab:x:102:
syslog:x:103:
fuse:x:104:
messagebus:x:105:
bluetooth:x:106:
scanner:x:107:
colord:x:108:
lpadmin:x:109:linux
ssl-cert:x:110:
lightdm:x:111:
nopasswdlogin:x:112:
netdev:x:113:
whoopsie:x:114:
mlocate:x:115:
ssh:x:116:
avahi-autoipd:x:117:
avahi:x:118:
pulse:x:119:
pulse-access:x:120:
utempter:x:121:
rtkit:x:122:
saned:x:123:
linux:x:1000:
sambashare:x:124:linux
linux@ubuntu:~/linux_c/thttpd/thttpd-2.25b$ addgroup www
addgroup: Only root may add a user or group to the system.
linux@ubuntu:~/linux_c/thttpd/thttpd-2.25b$ which addgroup
/usr/sbin/addgroup
linux@ubuntu:~/linux_c/thttpd/thttpd-2.25b$ sudo addgroup www
Adding group `www' (GID 1001) ...
Done.
linux@ubuntu:~/linux_c/thttpd/thttpd-2.25b$ cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:linux
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:linux
floppy:x:25:
tape:x:26:
sudo:x:27:linux
audio:x:29:pulse
dip:x:30:linux
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:
sasl:x:45:
plugdev:x:46:linux
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
libuuid:x:101:
crontab:x:102:
syslog:x:103:
fuse:x:104:
messagebus:x:105:
bluetooth:x:106:
scanner:x:107:
colord:x:108:
lpadmin:x:109:linux
ssl-cert:x:110:
lightdm:x:111:
nopasswdlogin:x:112:
netdev:x:113:
whoopsie:x:114:
mlocate:x:115:
ssh:x:116:
avahi-autoipd:x:117:
avahi:x:118:
pulse:x:119:
pulse-access:x:120:
utempter:x:121:
rtkit:x:122:
saned:x:123:
linux:x:1000:
sambashare:x:124:linux
www:x:1001:
linux@ubuntu:~/linux_c/thttpd/thttpd-2.25b$ cd /usr/local/thttpd/man/
linux@ubuntu:/usr/local/thttpd/man$
linux@ubuntu:/usr/local/thttpd/man$ ls -l
total 4
drwxr-xr-x 2 root root 4096 Sep 10 17:31 man8
linux@ubuntu:/usr/local/thttpd/man$ sudo mkdir -p man1
linux@ubuntu:/usr/local/thttpd/man$ ls -l
total 8
drwxr-xr-x 2 root root 4096 Sep 10 17:32 man1
drwxr-xr-x 2 root root 4096 Sep 10 17:31 man8
linux@ubuntu:/usr/local/thttpd/man$ cd -
/home/linux/linux_c/thttpd/thttpd-2.25b
linux@ubuntu:~/linux_c/thttpd/thttpd-2.25b$ sudo make install
mkdir -p /usr/local/thttpd/sbin
/usr/bin/install -c -m 555 -o bin -g bin thttpd /usr/local/thttpd/sbin
mkdir -p /usr/local/thttpd/man/man8
/usr/bin/install -c -m 444 -o bin -g bin thttpd.8 /usr/local/thttpd/man/man8
for i in cgi-src extras ; do ( \
cd $i ; \
pwd ; \
make \
WEBDIR=/usr/local/thttpd/www \
CGIBINDIR=/usr/local/thttpd/www/cgi-bin \
MANDIR=/usr/local/thttpd/man \
WEBGROUP=www \
install \
) ; done
/home/linux/linux_c/thttpd/thttpd-2.25b/cgi-src
make[1]: Entering directory `/home/linux/linux_c/thttpd/thttpd-2.25b/cgi-src'
mkdir -p /usr/local/thttpd/www/cgi-bin
rm -f /usr/local/thttpd/www/cgi-bin/redirect
cp redirect /usr/local/thttpd/www/cgi-bin/redirect
rm -f /usr/local/thttpd/man/man8/redirect.8
cp redirect.8 /usr/local/thttpd/man/man8/redirect.8
rm -f /usr/local/thttpd/www/cgi-bin/ssi
cp ssi /usr/local/thttpd/www/cgi-bin/ssi
rm -f /usr/local/thttpd/man/man8/ssi.8
cp ssi.8 /usr/local/thttpd/man/man8/ssi.8
rm -f /usr/local/thttpd/www/cgi-bin/phf
cp phf /usr/local/thttpd/www/cgi-bin/phf
make[1]: Leaving directory `/home/linux/linux_c/thttpd/thttpd-2.25b/cgi-src'
/home/linux/linux_c/thttpd/thttpd-2.25b/extras
make[1]: Entering directory `/home/linux/linux_c/thttpd/thttpd-2.25b/extras'
rm -f /usr/local/thttpd/sbin/makeweb /usr/local/thttpd/sbin/htpasswd /usr/local/thttpd/sbin/syslogtocern
cp makeweb /usr/local/thttpd/sbin/makeweb
chgrp www /usr/local/thttpd/sbin/makeweb
chmod 2755 /usr/local/thttpd/sbin/makeweb
cp htpasswd /usr/local/thttpd/sbin/htpasswd
cp syslogtocern /usr/local/thttpd/sbin/syslogtocern
rm -f /usr/local/thttpd/man/man1/makeweb.1
cp makeweb.1 /usr/local/thttpd/man/man1/makeweb.1
rm -f /usr/local/thttpd/man/man1/htpasswd.1
cp htpasswd.1 /usr/local/thttpd/man/man1/htpasswd.1
rm -f /usr/local/thttpd/man/man8/syslogtocern.8
cp syslogtocern.8 /usr/local/thttpd/man/man8/syslogtocern.8
make[1]: Leaving directory `/home/linux/linux_c/thttpd/thttpd-2.25b/extras'
OK 终于没有报错了
拷贝thttpd配置文件
contrib/redhat-rpm/thttpd.conf/
启动thttpd
/usr/local/thttpd/sbin/thttpd -C /usr/local/thttpd/conf/thttpd.conf
thttpd服务后出现/usr/sbin/thttpd: unknown user - 'httpd'错误提示
linux@ubuntu:/usr/local/thttpd$ ls -l
total 16
drwxr-xr-x 2 root root 4096 Sep 10 17:58 conf
drwxr-xr-x 4 root root 4096 Sep 10 17:32 man
drwxr-xr-x 2 root root 4096 Sep 10 17:33 sbin
drwxr-xr-x 3 root root 4096 Sep 10 17:26 www
linux@ubuntu:/usr/local/thttpd$ pwd
/usr/local/thttpd
linux@ubuntu:/usr/local/thttpd$ cd conf/
linux@ubuntu:/usr/local/thttpd/conf$ pwd
/usr/local/thttpd/conf
linux@ubuntu:/usr/local/thttpd/conf$ ls -l
total 4
-r--r--r-- 1 root root 305 Sep 10 17:59 thttpd.conf
linux@ubuntu:/usr/local/thttpd/conf$ cd ../
linux@ubuntu:/usr/local/thttpd$ chown -R linux:linux conf/
chown: changing ownership of `conf/thttpd.conf': Operation not permitted
chown: changing ownership of `conf/': Operation not permitted
linux@ubuntu:/usr/local/thttpd$ sudo chown -R linux:linux conf/
linux@ubuntu:/usr/local/thttpd$ ls -l
total 16
drwxr-xr-x 2 linux linux 4096 Sep 10 17:59 conf
drwxr-xr-x 4 root root 4096 Sep 10 17:32 man
drwxr-xr-x 2 root root 4096 Sep 10 17:33 sbin
drwxr-xr-x 3 root root 4096 Sep 10 17:26 www
linux@ubuntu:/usr/local/thttpd$ cd conf/
linux@ubuntu:/usr/local/thttpd/conf$ ls
thttpd.conf
linux@ubuntu:/usr/local/thttpd/conf$ ls -l
total 4
-r--r--r-- 1 linux linux 305 Sep 10 17:59 thttpd.conf
linux@ubuntu:/usr/local/thttpd/conf$ chmod 777 thttpd.conf
linux@ubuntu:/usr/local/thttpd/conf$ ls -l
total 4
-rwxrwxrwx 1 linux linux 305 Sep 10 17:59 thttpd.conf
linux@ubuntu:/usr/local/thttpd/conf$ vi thttpd.conf
linux@ubuntu:~/linux_c/thttpd$ cat /usr/local/thttpd/conf/thttpd.conf
# This section overrides defaults
dir=/home/httpd/html
chroot
user=httpd# default = nobody
logfile=/var/log/thttpd.log
pidfile=/var/run/thttpd.pid
# This section _documents_ defaults in effect
# port=80
port=81
# nosymlink# default = !chroot
# novhost
# nocgipat
# nothrottles
# host=0.0.0.0
# charset=iso-8859-1
linux@ubuntu:~/linux_c/thttpd$ cat in.sh
#!/bin/sh
echo "start thhtp conf"
mkdir -p /var/log
mkdir -p /var/run
sudo touch /var/log/thttpd.log
sudo touch /var/run/thttpd.pid
linux@ubuntu:~/linux_c/thttpd$ chmod +x in.sh
linux@ubuntu:~/linux_c/thttpd$ ./in.sh
start thhtp conf
linux@ubuntu:~/linux_c/thttpd$ /usr/local/thttpd/sbin/thttpd -C /usr/local/thttpd/conf/thttpd.conf
/var/log/thttpd.log: Permission denied
linux@ubuntu:~/linux_c/thttpd$ sudo /usr/local/thttpd/sbin/thttpd -C /usr/local/thttpd/conf/thttpd.conf
linux@ubuntu:~/linux_c/thttpd$ ps -aux|grep thttpd
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
httpd 3191 0.0 0.1 3020 1084 ? Ss 18:10 0:00 /usr/local/thttpd/sbin/thttpd -C /usr/local/thttpd/conf/thttpd.conf
linux 3194 0.0 0.0 4368 828 pts/1 S+ 18:10 0:00 grep --color=auto thttpd
用thttpd做Web Server
linux@ubuntu:/home/httpd/html$ tree
.
├── cgi-bin
│ ├── hello.c
│ ├── hello.cgi
│ ├── mul.html
│ ├── mult.c
│ └── mult.cgi
├── index.html
├── index.lighttpd.html
├── mul.html
└── test.html
1 directory, 9 files
linux@ubuntu:/home/httpd/html$ cat hello.html
<html>
<head>
<meta charset="UTF-8">
<title> 主标题 | 副标题</title>
</head>
<body>
<p>hello world</p>
</body>
</html>
浏览器输入,就可以看到网页界面了。
http://localhost:81/index.html
http://192.168.11.126:81/hello.html
OK 终于没有报错了
含CGI HTML测试
修改thttpd.conf
linux@ubuntu:~/linux_c/thttpd$ cat /usr/local/thttpd/conf/thttpd.conf
# This section overrides defaults
dir=/home/httpd/html
#chroot
#chroot
#屏蔽chroot是为了运行动态编译的CGI
user=httpd# default = nobody
logfile=/var/log/thttpd.log
pidfile=/var/run/thttpd.pid
# This section _documents_ defaults in effect
# port=80
port=81
# nosymlink# default = !chroot
# novhost
# nocgipati
#cgipat=**.cgi|**.pl
cgipat=/cgi-bin/**.cgi
# nothrottles
# host=0.0.0.0
# charset=iso-8859-1
到了这里,当我输入目标板ip时,问题出现了:
403 Forbidden
The requested URL '/mul.html' resolves to a file which is marked executable but is not a CGI file; retrieving it is forbidden.
thttpd/2.25b 29dec2003
原因:由于linux文件系统的权限问题,非cgi的文件请使用chmod -x去掉其可执行权限,否则web服务器会认为它是cgi ( 比如index.html这样的文件 )
thttpd web对目录和文件的访问权限要求非常严格,在测试的时候,已经心有体会。
在目标板的/var目录下添加两个文件:
[plain] view plaincopyprint?
1. $ mkdir -p /var/log
2. $ mkdir -p /var/run
3. $ sudo touch /var/log/thttpd.log
4. $ sudo touch /var/run/thttpd.pid
再次重启目标板,待进入shell界面,从主机的浏览器中输入:
[plain] view plaincopyprint?
1. 目标板IP:port/html文件名
在本人所用的调试环境下,浏览器地址栏输入:
[plain] view plaincopyprint?
1. 192.168.37.244:81/a.html
- 我的openwrt学习笔记(二十九)webserver之 thttpd
- 我的openwrt学习笔记(三十):webserver之uhttpd
- 我的openwrt学习笔记(二十八)webserver之lighttpd
- 我的openwrt学习笔记(十九):linux便捷开发命令之strace
- 我的openwrt学习笔记(二):OpenWrt 开发环境搭建
- 我的openwrt学习笔记(三十五):Openwrt 之luci-lua调用uci的测试
- 我的openwrt学习笔记(三十三):Openwrt 之lua 在ubuntu中的测试
- 我的openwrt学习笔记(三十四):Openwrt之uci 在ubuntu中的测试
- 我的openwrt学习笔记(三十二):openwrt 的UCI
- 我的openwrt学习笔记(一):OpenWrt简介
- 我的openwrt学习笔记(四):OpenWrt源代码下载
- 学习笔记(二十九)
- 我的php学习笔记(二十九)PHP5中Cookie与 Session详解
- 我的openwrt学习笔记(二十):WIFI 无线传输速率测试-iperf
- 我的openwrt学习笔记(二十一):广域网IP地址获取_socket http
- 我的openwrt学习笔记(二十二):网络时间同步
- 我的openwrt学习笔记(二十三):MTK7688 elian一键配置原理
- 我的openwrt学习笔记(二十四):WIFI无线传输速率相对测试方法_netcat
- Spring Mvc常用注解
- 【POJ2516】【最小费用流】
- uva 1395 - Slim Span(生成树)
- 简单的动画播放
- 1.Linux链接概念 http://www.cnblogs.com/itech/archive/2009/04/10/1433052.html
- 我的openwrt学习笔记(二十九)webserver之 thttpd
- 盘点大数据生态圈,那些繁花似锦的开源项目
- LNMP环境的基础搭建,即Linux、Nginx、MySQL、PHP环境
- C++函数中const形参与非const形参
- uva 1464 - Traffic Real Time Query System(双联通+LCA)
- java设计模式第6弹--单例模式
- Android启动器(Launcher)开发详解
- widthStep、width
- ios-手势总结demo