`
helloyesyes
  • 浏览: 1311203 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

linux下 boa cgi移植(转)

阅读更多

http://blog.chinaunix.net/u1/33226/showart_485155.html

嵌入式WEB服务器常见的有

lighttpd

shttpd

thttpd

boa

mathopd

minihttpd

appweb

goahead

========================================================================

嵌入式WEB服务器BOA的移植方法(一)2007-2-26 16:20:00

随着Internet技术的兴起,在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,

这种程序结构也就是大家非常熟悉的B/S结构,即在 嵌入式设备上运行一个支持脚本或CGI功能的Web服务器,

能够生成动态页面,在用户端只需要通过Web浏览器就可以对嵌入式设备进行管理和监控,非常方 便实用。

本节主要介绍这种应用的开发和移植工作。

用户首先需要在嵌入式设备上成功移植支持脚本或CGI功能的Web服务器,然后才能进行应用程序的开发。

1、 嵌入式Web服务器移植 由于嵌入式设备资源一般都比较有限,并且也不需要能同时处理很多用户的请求,

因此不会使用Linux下最常用的如Apache 等服务器,而需要使用一些专门为嵌入式设备设计的Web服务器,

这些Web服务器在存贮空间和运行时所占有的内存空间上都会非常适合于嵌入式应用场合。

典型的嵌入式Web服务器有Boa (www.boa.org)和thttpd (http://www.acme.com/software/thttpd/)等,

它们和Apache等高性能的Web服务器主要的区别在于它们一般是 单进程服务器,只有在完成一个用户请求后才能响应

另一个用户的请求,而无法并发响应,但这在嵌入式设备的应用场合里已经足够了。

我们绍比较常用的Boa服务器的移植。

Boa是一个非常小巧的Web服务器,可执行代码只有约60KB。它是一个单任务Web服务器,只能依次完成用户的请求,

而不会fork出新的进程来处理 并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标

是速度和安全,在其站点公布的性能测试中,Boa的性能 要好于Apache服务器。

第一步完成Boa程序的移植。从www.boa.org下载Boa源码,当前最新版本为0.94.13,将其解压并进入源码目录的src

子目录

# tar xzf boa-0.94.13.tar.gz

# cd boa-0.94.13/src

生成Makefile文件

# ./configure

修改Makefile文件,找到CC=gcc,将其改成CC = arm-linux-gcc,再找到CPP = gcc –E,

将其改成CPP = arm-linux-gcc –E,并保存退出。

然后运行make进行编译,得到的可执行程序为boa,将调试信息剥去,得到的最后程序只有约60KB大小。

# make

# arm-linux-strip boa

第二步完成Boa的配置,使其能够支持CGI程序的执行。Boa需要在/etc目录下建立一个boa目录,里面放入Boa的主要

配置文件boa.conf。在Boa源码目录下已有一个示例boa.conf,可以在其基础上进行修改,下面解释一下该文件的含义:

#监听的端口号,缺省都是80,一般无需修改

Port 80

# bind调用的IP地址,一般注释掉,表明绑定到INADDR_ANY,通配于服务器的所有IP地址

#Listen 192.68.0.5

#作为哪个用户运行,即它拥有该用户的权限,一般都是nobody,需要/etc/passwd中有

#nobody用户

User nobody

#作为哪个用户组运行,即它拥有该用户组的权限,一般都是nogroup,需要在/etc/group文

#件中有nogroup组

Group nogroup

#当服务器发生问题时发送报警的email地址,目前未用,注释掉

#ServerAdmin root@localhost

#错误日志文件。如果没有以/开始,则表示从服务器的根路径开始。如果不需要错误日志,

则用#/dev/null。在下面设置时,注意一定要建立/var/log/boa目录

ErrorLog /var/log/boa/error_log

#访问日志文件。如果没有以/开始,则表示从服务器的根路径开始。如果不需要错误日志,

则用#/dev/null或直接注释掉。在下面设置时,注意一定要建立/var/log/boa目录

#AccessLog /var/log/boa/access_log

#是否使用本地时间。如果没有注释掉,则使用本地时间。注释掉则使用UTC时间

#UseLocaltime

#是否记录CGI运行信息,如果没有注释掉,则记录,注释掉则不记录

#VerboseCGILogs

#服务器名字

ServerName www.hyesco.com

#是否启动虚拟主机功能,即设备可以有多个网络接口,每个接口都可以拥有一个虚拟的Web服

#务器。一般注释掉,即不需要启动

#VirtualHost

#非常重要,HTML文档的主目录。如果没有以/开始,则表示从服务器的根路径开始。

DocumentRoot /var/www

#如果收到一个用户请求的话,在用户主目录后再增加的目录名

UserDir public_html

#HTML目录索引的文件名,也是没有用户只指明访问目录时返回的文件名

DirectoryIndex index.html

#当HTML目录没有索引文件时,用户只指明访问目录时,boa会调用该程序生成索引文件然后

#返回给用户,因为该过程比较慢最好不执行,可以注释掉或者给每个HTML目录加上#DirectoryIndex指明的文件

#DirectoryMaker /usr/lib/boa/boa_indexer

#如果DirectoryIndex不存在,并且DirectoryMaker被注释,那么就用Boa自带的索引

#生成程序来生成目录的索引文件并输出到下面目录,该目录必须是Boa能读写

# DirectoryCache /var/spool/boa/dircache

#一个连接所允许的HTTP持续作用请求最大数目,注释或设为0都将关闭HTTP持续作用

KeepAliveMax 1000

#HTTP持续作用中服务器在两次请求之间等待的时间数,以秒为单位,超时将关闭连接

KeepAliveTimeout 10

#指明mime.types文件位置。如果没有以/开始,则表示从服务器的根路径开始。可以注释掉

#避免使用mime.types文件,此时需要用AddType在本文件里指明

MimeTypes /etc/mime.types

#文件扩展名没有或未知的话,使用的缺省MIME类型

DefaultType text/plain

#提供CGI程序的PATH环境变量值

CGIPath /bin:/usr/bin:/usr/local/bin

#将文件扩展名和MIME类型关联起来,和mime.types文件作用一样。如果用mime.types

#文件,则注释掉,如果不使用mime.types文件,则必须使用

#AddType application/x-httpd-cgi cgi

#指明文档重定向路径

#Redirect /bar http://elsewhere/feh/bar

#为路径加上别名

Alias /doc /usr/doc

#非常重要,指明CGI脚本的虚拟路径对应的实际路径。一般所有的CGI脚本都要放在实际路径

#里,用户访问执行时输入站点+虚拟路径+CGI脚本名

ScriptAlias /cgi-bin/ /var/www/cgi-bin/

用户可以根据自己需要,对boa.conf进行修改,但必须要保证其他的辅助文件和设置必须和boa.conf里的配置相符,

不然Boa就不能正常工作。 在上面的例子中,我们还需要创建日志文件所在目录/var/log/boa,

创建HTML文档的主目录/var/www,将mime.types文件拷贝 到/etc目录,

创建CGI脚本所在目录/var/www/cgi-bin/。mime.types文件用来指明不同文件扩展名对应的MIME类型,

一般 可以直接从Linux主机上拷贝一个,大部分也都是在主机的/etc目录下。

===================================================================

===================host test=======================================

1.进入 boa-0.94.13/src

./configure

make

2.在etc/下建立boa目录并将boa.conf拷贝到该目录下.更改boa.conf

Group nogroup ===》Group 0

3.在 /var/log/下建立boa目录,该目录下可以查看boa服务器的日志

4.其它的一些路径

默认是/var/www下的内容可以访问 (DocumentRoot /var/www)

默认cgi :ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ (cgi可执行程序放在 /usr/lib/cgi-bin/目录下)

例子http://201.201.201.249/cgi-bin/cgi-test.cgi

CGIPath /bin:/usr/bin:/usr/local/bin

只有这些目录下的命令可以被调用,如果要root的权限(如ifconfig配置ip)需要加上/sbin

=====================================================================

cgi例子

=====================================================================

//pass.c

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

char* getcgidata(FILE* fp, char* requestmethod);

int main()

{

char *input;

char *req_method;

char name[64];

char pass[64];

int i = 0;

int j = 0;

// printf("Content-type: text/plain; charset=iso-8859-1\n\n");

printf("Content-type: text/html\n\n");

printf("The following is query reuslt:<br><br>");

req_method = getenv("REQUEST_METHOD");

input = getcgidata(stdin, req_method);

// 我们获取的input字符串可能像如下的形式

// Username="admin"&Password="aaaaa"

// 其中"Username="和"&Password="都是固定的

// 而"admin"和"aaaaa"都是变化的,也是我们要获取的

// 前面9个字符是UserName=

// 在"UserName="和"&"之间的是我们要取出来的用户名

for ( i = 9; i < (int)strlen(input); i++ )

{

if ( input[i] == '&' )

{

name[j] = '\0';

break;

}

name[j++] = input[i];

}

// 前面9个字符 + "&Password="10个字符 + Username的字符数

// 是我们不要的,故省略掉,不拷贝

for ( i = 19 + strlen(name), j = 0; i < (int)strlen(input); i++ )

{

pass[j++] = input[i];

}

pass[j] = '\0';

printf("Your Username is %s<br>Your Password is %s<br> \n", name, pass);

return 0;

}

char* getcgidata(FILE* fp, char* requestmethod)

{

char* input;

int len;

int size = 1024;

int i = 0;

if (!strcmp(requestmethod, "GET"))

{

input = getenv("QUERY_STRING");

return input;

}

else if (!strcmp(requestmethod, "POST"))

{

len = atoi(getenv("CONTENT_LENGTH"));

input = (char*)malloc(sizeof(char)*(size + 1));

if (len == 0)

{

input[0] = '\0';

return input;

}

while(1)

{

input[i] = (char)fgetc(fp);

if (i == size)

{

input[i+1] = '\0';

return input;

}

--len;

if (feof(fp) || (!(len)))

{

i++;

input[i] = '\0';

return input;

}

i++;

}

}

return NULL;

}

/*

* gcc -o pass.cgi pass.c

*/

//pass.html

<html>

<head><title>用户登陆验证</title></head>

<body>

<form name="form1" action="/cgi-bin/pass.cgi" method="POST">

<table align="center">

<tr><td align="center" colspan="2"></td></tr>

<tr>

<td align="right">用户名</td>

<td><input type="text" name="Username"></td>

</tr>

<tr>

<td align="right">密&nbsp;&nbsp;码</td>

<td><input type="password" name="Password"></td>

</tr>

<tr>

<td><input type="submit" value="登 录"></td>

<td><input type="reset" value="取 消"></td>

</tr>

</table>

</form>

</body>

</html>

分享到:
评论

相关推荐

    boa.rar_boa_boa linux_boa embedd_boa v_cgi

    在Linux环境下移植 boa,首先需要确保你的系统安装了必要的开发工具,如gcc编译器、make等。然后下载 boa源代码,解压并进入源码目录。执行 configure 脚本以配置构建环境,接着运行 make 命令编译源代码。如果在...

    linux_WEB服务器BOA的移植方法

    本文将详细介绍如何在Linux环境下移植Boa Web服务器,以满足嵌入式设备的需求。 #### 二、Boa Web服务器简介 Boa是一款专为嵌入式系统设计的小巧Web服务器,具有以下特点: - **体积小**:Boa的可执行文件大小仅约...

    嵌入式boa服务器的移植.doc

    boa服务器支持多种平台,包括Windows、Linux和Unix等,且具有良好的可移植性和可扩展性。 在嵌入式系统中,boa服务器可以作为一个轻便的Web服务器,提供了一个灵活的解决方案来满足特定的应用需求。例如,在智能...

    web服务器boa的移植方法

    尽管如此,Boa仍然支持CGI接口,可以通过fork机制为每个CGI程序启动一个独立的进程。Boa的设计原则是追求速度与安全性。 #### 二、Boa服务器移植准备工作 为了将Boa服务器移植到特定的目标系统(如本例中的s3c2410...

    基于linux2.6及S3C2410上的BOA的移植.pdf

    本文主要介绍了如何在Linux 2.6内核以及Samsung公司的S3C2410微处理器开发板上移植BOA,使其支持CGI(通用网关接口)功能,从而实现动态网页的生成和管理嵌入式设备。 首先,BOA的特性在于其轻量级,它的可执行代码...

    webserver CGI 服务器搭建 boa-0.94.13-arm.rar

    "boa移植及cgi库使用指南.doc"、"嵌入式BOA移植.doc" 和 "嵌入式linux下Boa的移植.doc" 提供了将Boa服务器移植到ARM平台的步骤。这通常包括配置编译环境,修改源码以适应目标硬件,调整配置文件,以及解决可能出现的...

    boa服务器移植doc

    ### Boa服务器移植知识点 #### 一、Boa服务器简介与目录结构 Boa是一款开源的Web服务器软件,因其轻量级和高效性被广泛应用于嵌入式系统中。了解其基本目录结构对于服务器的配置与移植至关重要。 1. **`boa.conf` ...

    linux下的webserver-BOA及CGIC库的使用指南

    本文档主要介绍了如何在Linux环境下移植并配置BOA Web Server。 ##### 1.1 下载与解压 首先,从官方网站[www.boa.org](http://www.boa.org)下载最新版本的BOA源码包`boa-0.94.13.tar.gz`。下载完成后,将其解压缩...

    boa在嵌入式Linux上的移植

    ### boa在嵌入式Linux上的移植 #### 一、简介 Boa 是一款轻量级 Web 服务器,因其体积小(约60KB)而受到欢迎。它适用于资源有限的嵌入式系统,并且设计注重速度与安全性。尽管 Boa 不能通过 fork 出新进程的方式...

    boa web服务器 ARM9下 linux编译移植成功

    嵌入式web服务器支持CGI编程 移植到ARM板上修改权限 chmod +x boa 再输入 # boa & 后台运行

    Linux下boa视频服务器的构建[定义].pdf

    【Linux下 boa视频服务器的构建】是指在...总结来说,Linux下的 boa视频服务器构建是一个针对嵌入式设备的Web服务解决方案,通过移植和配置 boa,可以实现轻量级的视频服务和远程控制功能,同时兼顾资源效率和安全性。

    Embeded linux之移植boa.docx

    在嵌入式Linux系统中,移植BOA Web服务器是一个关键步骤,这允许设备提供HTTP服务,接收和响应来自网络的请求。BOA是一款轻量级的Web服务器,适合资源有限的嵌入式环境。以下是对移植BOA过程的详细解释: 1. **解压...

    Boa.rar_EM_arm boa web server_boa_linux boa

    本文将详细解析如何将Boa Web服务器移植到ARM-Linux和mipsel-linux这两种不同的处理器架构上。 一、Boa Web服务器简介 Boa是一款开源的、非线程的、单进程Web服务器,它设计的目标是简洁和稳定,而不是追求高性能。...

    Linux下boaweb服务器的构建.pdf

    Linux系统下的Boa服务器是一个典型代表,尤其适用于资源有限的嵌入式环境。 **Boa服务器的移植** 1. **选择服务器**:由于嵌入式设备资源有限,不适用如Apache这样的高性能多进程服务器,而是倾向于Boa或thttpd这...

    boa服务器移植

    boa服务器移植是一个重要的任务,尤其对于嵌入式系统开发者来说,因为这允许他们在有限的硬件资源上实现Web服务功能。S3C6410是一款高性能的ARM Cortex-A8微处理器,广泛应用于嵌入式设备和开发板,如智能设备、工业...

    web服务器BOA与CGI

    在本文档中,我们将详细介绍BOA的移植过程以及使用方法,并提供一个CGI示例,希望能为读者带来实际的帮助。 #### 二、BOA服务器的特点 BOA的主要特点包括但不限于: 1. **轻量化**:其大小仅有60KB左右,适合于...

    Linux下boa视频服务器的构建文件.pdf

    在Linux环境下,构建一个 boa 视频服务器是嵌入式设备管理和交互的一种常见方式,尤其在需要通过Web界面实现远程监控或控制时。 boa 服务器因其小巧轻便、支持CGI功能,成为嵌入式环境中的理想选择。下面将详细介绍 ...

Global site tag (gtag.js) - Google Analytics