陈奇网络工作室

SylixOS移植Boa服务器

网站建设服务器

1.美国银行简介

Boa是一个非常紧凑的Web服务器,它的可执行代码只有60KB左右。作为单任务Web服务器,Boa只能依次完成用户的请求,不会分叉出新的进程来处理并发的连接请求。但是Boa支持CGI,可以创建一个进程让CGI程序fork执行。Boa的设计目标是速度和安全,适用于嵌入式系统的单任务http服务器,开源代码,高性能。

下面简单介绍一下将Boa服务器移植到SylixOS的具体操作步骤,希望能有所帮助。

2.SylixOS Boa移植:

Boa采用服务器模式,需要编译服务器的可执行程序。

2.1下载Boa源代码

在官网下载第三方中间件的资源。Boa的官方网站是:http://www.boa.org/.本文使用的版本是boa-0.94.13。下载后,解压文件。文件目录如图2-1所示。

图2-1 Boa解压缩文件

2.2服务器项目创建

在Real-Evo IDE中创建boa_sylixos应用项目,删除项目中src目录下的boa_sylixos.c文件,导入一系列相关的。c和。源代码中src目录下的h文件。导入的工程文档如图2-2所示。

图2-2工程文件

2.3修改源文件

有关源文件修改的详细信息,请参考《移植boa服务器过程文档》。

2.4修改boa.conf配置文件

boa-0.94.13目录下有一个例子boa.conf,可以修改。如下所示:

(1)对1)组的修改

修改:组nogroup

用于:组0

(2)2)用户的修改

修改:用户nobody

是:用户0

(3)对3)ScriptAlias的修改

修订版:script alias/CGI-bin//usr/lib/CGI-bin/

for:script alias/CGI-bin//var/www/CGI-bin/

(5)对5)DoucmentRoot的修改

DoucmentRoot /var/www

(6)6)服务器名的设置

修改:# servername www.your.org.here

收件人:www.your.org.here servername

否则,将出现错误ldquogethostbyname:没有这样的文件或目录。

(7)访问日志修改

修改:access log/var/log/boa/access _ log。

就是:# access log/var/log/boa/access _ log。

否则会出现错误信息:ldquo无法复制2错误日志:错误的文件描述符。

2.5编译生成boa_sylixos可执行文件。

编译生成可执行文件boa_sylixos,上传到目标机/etc/boa目录;

2.6复制mime.types文件

将linux /etc目录下的mime.types文件复制到目标machine /etc目录下;(MIME.types文件用于指示对应于不同文件扩展名的MIME类型。一般可以直接从linux主机上复制一个,大部分都在主机的/etc目录下。)

2.7新项目boa_cgi_child_func

目的:在Boa源代码中实现fork函数的功能。

1)创建一个app项目,修改boa_cgi_child_func.c文件,添加以下代码:

#包含stdio.h

#包含stdlib.h

#定义NI_MAXHOST 20

#定义CGI_ENV_MAX 50

#定义SOCKETBUF_SIZE 8192

#定义MAX_HEADER_LENGTH 1024

#定义客户端流大小套接字缓冲区大小

#定义缓冲区大小客户端流大小

结构mmap_entry {

dev_t开发;

ino _ t ino

char * mmap

int use _ count

size _ t len

};

结构请求{ /*挂起的请求*/

int fd/*客户端的套接字fd */

int状态;/*参见#defines.h */

time _ t time _ last/*上次成功的时间。op. */

char *路径名;/*请求文件的路径名*/

int简单;/*简单的要求?*/

int keepalive/*保持活动状态*/

int kacount/*保持活动计数*/

int data _ fd/*数据的FD */

无符号长文件大小;/*文件大小*/

无符号长filepos/*文件中的位置*/

char * data _ mem/* mmapped/malloced字符数组*/

int方法;/* M_GET,M_POST等。*/

char * logline/*日志文件的行*/

char * header _ line/*未处理或未完全处理的标题行的开头*/

char *头_端;/*最后已知的报头结尾,或已处理数据的结尾*/

int parse _ pos/*我们分析了多少*/

int客户端流位置;/*我们读了多少……*/

int buffer _ start/*缓冲区开始的位置*/

int buffer _ end/*缓冲区结束的位置*/

char * http _ version/* HTTP/?请求的*/

内部响应状态/* R _未找到等。*/

char * If _ Modified _ Since/* If-Modified-Since */

上次修改的时间;/*最后修改时间:*/

char local _ IP _ addr[NI _ max host];/*对于虚拟主机*/

/* CGI变量*/

int远程端口/*可用于ident */

char remote _ IP _ addr[NI _ max host];/*在inet_ntoa之后*/

(同Internationalorganizations)国际组织是_ cgi/*如果CGI/NPH,则为false */

int cgi _ status

int cgi _ env _ index/*数组中的索引*/

/*日志文件的代理和引用*/

char * header _ user _ agent

char * header _ referer

int post _ data _ fd/*用于发布数据tmpfile的FD */

char * path _ info/*环境变量*/

char * path _ translated/*环境变量*/

char * script _ name/*环境变量*/

char * query _ string/*环境变量*/

char * content _ type/*环境变量*/

char * content _长度;/*环境变量*/

struct mmap _ entry * mmap _ entry _ var;

结构体请求*下一个/*下一个*/

结构请求*上一页/*上一个*/

/*这条线以下的所有内容都保留*/

char BUFFER[BUFFER _ SIZE 1];/*通用输入输出缓冲器*/

char request _ uri[MAX _ HEADER _ LENGTH 1];/* uri */

char CLIENT _ STREAM[客户端流大小];/*来自客户的数据——适合或不适合*/

char * CGI _ ENV[CGI _ ENV _ MAX 4];/* CGI环境*/

#ifdef ACCEPT_ON

char ACCEPT[MAX _ ACCEPT _ LENGTH];/*接受:字段*/

#endif

};

typedef结构请求请求;

int main (int argc,char **argv)

{

void (*child_func)(request *req,int *pipes,int use _ pipes);

请求*请求

int *管道;

int使用_管道

child _ func=(void *)atoi(argv[0]);

req=(request *)atoi(argv[1]);

pipes=(int *)atoi(argv[2]);

use _ pipes=*((int *)atoi(argv[3]);

儿童功能(请求,管道,使用管道);

return(0);

}

2) 编译生成boa_cgi_child_func可执行文件,利用文件传送协议工具上传到目标机/etc/boa目录下。

2.8 测试蟒蛇服务器功能2.8.1 不包含cgic库的公共网关接口程序

1)索引。超文本标记语言网页

超文本标记语言

headtitleCGI登陆/标题/标题

身体

表单名称=登录操作=。/cgi-bin/login.cgi姓名:输入类型=文本名称=名称/

br/密码:输入类型=密码名称=密码/

br/确定:输入类型=提交值=登陆/

/表单

/body

/html

2)test.c CGI测试程序代码

# includestdio.h

#includestdlib.h

int main()

{

字符*日期

char name[50],pwd[20];

printf(内容类型:文本/html;charset=GB 2312 \ \ \ \ n \ \ \ \ n);

printf(标题登陆结果/TITLE);

printf(H3登陆结果/H4);

date=getenv(QUERY _ STRING);

if(date==NULL)

printf(p错误:数据没有被输入或数据传输发生错误/p);

其他

{

sscanf(date,name=%[^]pwd=%s,name,pwd);

printf(pname=%s/p,name);

printf(ppwd=%s/p,pwd);

printf(%s,date);

}

返回0;

}

3)操作流程

答将index.html拷贝到先前我们创建的/var/www目录下;

b)在集成驱动电子设备中新建boa _测试应用工程,生成测试公共网关接口程序:boa _ test

c)将boa _测试拷贝到/var/www/cgi-bin目录下

d)执行/boa_sylixos。

e)在浏览器地址栏输入http://192.168.7.32/index.html,产生如图2-3所示。

图2-3 index.html登陆界面

f)在姓名和密码栏分别输入相应值,点击登陆按钮,进入如图24所示界面。

图2-4 CGI响应程序执行

2.8.2 包含cgic库的公共网关接口程序

1)操作流程

g)从公共网关接口官网(http://www.boutell.com/cgic/)上下载cgic库文件;

h)在RealEvo IDE中创建boa_cgictest应用工程;

我)把cgic.h,cgic.c拷贝到工程boa_cgictest源码文件所在的目录科学研究委员会下,然后编译生成boa_cgictest文件,并将之上传到目标机/var/www/cgi-bin目录下;

j)执行/boa_sylixos。

k)在浏览器地址栏输入http://192 .168 .7 .32/CGI-bin/boa _ CGI测试,效果如图25所示。

图25 CGI响应程序执行

可以看到一个网页被展示出来。这样,包含cgic库的的公共网关接口程序就运行起来了。

3.参考资料

1)http://博客。中国UNIX。net/uid-20620288-id-3139686。超文本标记语言

2)http://博客。csdn。net/曼彻斯特mi/文章/详情/50826129

更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码代理商官网:www.chenqinet.cn

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3