嵌入式WEB Server的应用

嵌入式WEB Server的应用

 

Ver1.0 by tian    2009-5-28

Ver2.0 by tian    2009-6-4

 

 转载请注明出处:http://blog.youkuaiyun.com/AIXT2006/archive/2009/06/04/4242480.aspx

1       Mini_httpd-1.19

1.1      下载与编译

http://acme.com/software/mini_httpd/

mini_httpd-1.19.tar.gz

1.2      安装与配置

mini_httpd程序主要有2个文件:

/bin/mini_httpd

/etc/mini_httpd.conf    (主配置文件)

 

支持GETHEADPOST方法

* 支持CGI功能

* 支持基本的验证功能

* 支持安全 .. 上级目录功能

* 支持通用的MIME类型

* 支持目录列表功能

* 支持使用 index.html, index.htm, index.cgi 作为首页

* 支持多个根目录的虚拟主机

* 支持标准日志记录

* 支持自定义错误页

* Trailing-slash redirection

本系统中,web服务器根目录为:/usr/web,首页为index.html。配置文件为/etc/mini_httpd.conf,启动命令为:mini_httpd -C /etc/mini_httpd.conf;其配置内容为:

# GPL $Id: mini_httpd.conf,v 1.1.1.1 2005/02/28 18:22:49 cvonk Exp $

# configuration for HTTP(s) server (mini_httpd)

#

nochroot

#dir=/web/

data_dir=/usr/web/

#data_dir=/var/httpd

user=root

#logfile=/var/httpd/mini_httpd.log

#ssl

# instead of the .pem below, it should probably use the same cert as

# VPN or WPA

#certfile=/etc/sysconfig/mini_httpd/mini_httpd.pem

cgipat=**.cgi

1.3      使用与维护

启动:

# mini_httpd -C /etc/mini_httpd.conf

停止:

# kill PID

 

2       boa-0.94.13

2.1      下载与编译

http://www.boa.org/

下载:boa-0.94.13.tar.gz

直接在boa/src目录下执行make即可生成boa可执行文件。

 

2.2      安装与配置

boa程序主要有3个文件:

/bin/boa

/etc/boa/boa.conf    (主配置文件)

/etc/mime.conf        (注意将权限改为777)

 

LINUX下的应用程序的配置都是以配置文件的形式提供的,一般的都是放在目标板/etc/目录下或者/etc/config目录下,但boa的配置文件boa.conf一般都放置在目标板 /etc/boa/boa.conf 目录下。

例如一个典型的boa.conf文件格式如下:

 

ServerName AT91SAM9261

DocumentRoot /home/web

ScriptAlias /cgi-bin/ /home/web/cgi-bin/

ScriptAlias /index.html /home/httpd/html/index.html

它指定了HTML页面(例如index.html必须放到/home/web/目录下,cgi可执行文件必须放到/home/web/cgi-bin目录下)

 

建议阅读文章:

http://www.51eda.com/Article/embed_system/rtos/200405/806.html

 

boa 支持CGI,不过不一定用C,只要符合CGI要求,用 perl/php/pyshell脚本都是可以的。比如有人就在uC下使用了boa+php(cgi)

http://www.menie.org/georges/uClinux/boa-php.html

2.3      使用与维护

启动命令与运行打印信息:

/ # boa

[27/May/2009:23:40:21 +0000] boa: server version Boa/0.94.13

[27/May/2009:23:40:21 +0000] boa: server built Feb 28 2004 at 21:47:23.

[27/May/2009:23:40:21 +0000] boa: starting server pid=902, port 80

/ # [27/May/2009:23:40:40 +0000] request from 10.13.88.186 "GET /favicon.ico HTy

[27/May/2009:23:40:50 +0000] request from 10.13.88.186 "GET /favicon.ico HTTP/1y

 

 

3       lighttpd-1.4.18

3.1      下载与编译

http://www.lighttpd.net/

下载:lighttpd-1.4.18.tar.gz

 

X86&FC6版本:

# ./configure -prefix=/usr/local/lighttpd-1.4.22

 

lighttpd-1.4.22版本,对于AT91SAM9261 & arm-linux-2.6.20& arm-linux-gcc 3.4.4,执行 ./configure 时会报错:

configure: error: zlib-headers and/or libs where not found, install them or build with --without-zlib

所以退而采用lighttpd-1.4.18版本:

# tar –xzvf lighttpd-1.4.18.tar.gz

# cd lighttpd-1.4.18

# export CC=arm-linux-gcc

# export AR=arm-linux-ar

# export LD=arm-linux-ld

# export RANLIB=arm-linux-ranlib

# export STRIP=arm-linux-strip

# ./configure -prefix=/usr/lighttpd-1.4.18 -host=arm-linux --disable-FEUTARE -disable-ipv6 -disable-lfs

# make

# make install

这里特别注意一下:-prefix=/usr/lighttpd-1.4.18 ,是将软件先装在Host/usr/lighttpd-1.4.18目录内,然后将其复制到开发板的/usr/lighttpd-1.4.18目录下。我之所以这样做是因为这个软件在 make install时会配置他私有的库文件的路径,在开发板运行时会在-prefix= 的文件加下找他的私有库文件。而我又是交叉编译给开发板,这样配置比较方便移植。

--disable-FEUTARE -disable-ipv6 -disable-lfs 可不加。

3.2      安装与配置

3.2.1    安装到ARM文件系统

Host上安装好的/usr/lighttpd-1.4.18目录,复制到开发板的/usr/目录下:

# cp –a /usr/lighttpd-1.4.18 /usr/

3.2.2    配置lighttpd.conf文件

将编译目录下doc/lighttpd.conf文件拷到AT91SAM9261 & arm-linux-2.6.20的文件系统/etc目录下,并作如下修改:

(1)、设置web服务的根目录server.document-root

server.document-root        = "/srv/www/htdocs/"

改为

server.document-root        = "/home/web/"

 

(2)server.modules中使能"mod_cgi""mod_fastcgi"

server.modules              = (

                                "mod_fastcgi",

                                "mod_cgi")

(3)、屏蔽URL相关语句

屏蔽以下语句,否则嵌入式这样的小系统下可能无法启动

# $HTTP["url"] =~ "/.pdf$" {

#   server.range-requests = "disable"

# }

(4)、使能“.py”、“.sh 、“.cgi”类型CGI

修改

cgi.assign = (".cgi" => ""

            )

对于带扩展名且需要特定解析程序执行的CGI,可以指定解析程序的路径,如:

cgi.assign = ( ".pl" => "/usr/bin/perl",

".cgi" => "/usr/bin/perl" )

对于带扩展名切不需要特定解析程序就能执行的CGI,可指定解析程序为空,如:

cgi.assign = (".cgi" => "")

对于不带扩展名的CGI程序,只能通过固定路径存取了,如:

cgi.assgin = ( "/cgi-bin/mycgi" => "/usr/local/cgi/mycgi )

具体配置如下:

static-file.exclude-extensions = ( ".php", ".sh", ".pl", ".fcgi", ".py" )

#### CGI module

CGI.assign                 = ( ".sh"  => "/bin/sh",

                               ".py"  => "/usr/python2.5.4/bin/python",

                               ".pl"  => "/usr/bin/perl",

                               ".cgi" => "" )

 (5)、禁止log功能

ARM文件系统可能不能读写,所以log相关设置用#号注释掉:

## where to send error-messages to

# server.errorlog             = "/var/log/lighttpd/error.log"

 

#### accesslog module

# accesslog.filename          = "/var/log/lighttpd/access.log"

 

(6)开看程序需要那些动态库(可选)

[root@TianLinux lighttpd-1.4.22]# arm-linux-readelf -d /usr/ztian/work/lighttpd/lighttpd-1.4.18/src/lighttpd

 

Dynamic section at offset 0x200d0 contains 21 entries:

  标记        类型                         名称/

 0x00000001 (NEEDED)                     共享库:[libdl.so.2]

 0x00000001 (NEEDED)                     共享库:[libc.so.6]

 0x0000000c (INIT)                       0xc1b8

 0x0000000d (FINI)                       0x22e8c

 0x00000004 (HASH)                       0x8128

 0x00000005 (STRTAB)                     0xa310

 0x00000006 (SYMTAB)                     0x8b40

 0x0000000a (STRSZ)                      5925 (bytes)

 0x0000000b (SYMENT)                     16 (bytes)

 0x00000015 (DEBUG)                      0x0

 0x00000003 (PLTGOT)                     0x301a0

 0x00000002 (PLTRELSZ)                   960 (bytes)

 0x00000014 (PLTREL)                     REL

 0x00000017 (JMPREL)                     0xbdf8

 0x00000011 (REL)                        0xbdc0

 0x00000012 (RELSZ)                      56 (bytes)

 0x00000013 (RELENT)                     8 (bytes)

 0x6ffffffe (VERNEED)                    0xbd30

 0x6fffffff (VERNEEDNUM)                 2

 0x6ffffff0 (VERSYM)                     0xba36

 0x00000000 (NULL)                       0x0

You have new mail in /var/spool/mail/root

 

3.3      使用与维护

启动命令与运行打印信息:

# /usr/lighttpd-1.4.18/sbin/lighttpd -f /etc/lighttpd.conf

2009-06-02 23:50:12: (log.c.75) server started

停止命令与停止打印信息:

# kill “PID”

2009-06-03 00:42:19: (server.c.1470) server stopped by UID = 0 PID = 837

 

添加到PC启动服务:

cp ./doc/rc.lighttpd.redhat /etc/rc.d/init.d/lighttpd

chown root:root /etc/rc.d/init.d/lighttpd

chmod 755 /etc/rc.d/init.d/lighttpd

chkconfig --add lighttpd

4       它们对python CGI的支持

Mini_httpboalighttpd都支持python写的CGI,如果python环境没有设置好,会出现不支持import的现象。其中lighttpd支持最为完善灵活。

 

 

参考文献

[1]          CGIBOA实现下载功能,求教 http://bbs2.chinaunix.net/thread-1431385-1-1.html

[2]          移植多款轻量级 Web服务器到ARM-Linux系统 http://blog.chinaunix.net/u1/34474/showart_488114.html

[3]          arm 移植 lighttpd + CGI 测试 http://blog.chinaunix.net/u1/39383/showart_1855731.html

[4]          lighttpd,thttpd,shttpd - 轻量级webserver介绍 http://bbs.unixtech.cn/read.php?tid=396

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值