Boa是一个非常小巧的Web服务器,其可执行代码只有60K左右。它是一个单任务的Web服务器,只能依次完成用户的请求,而不会fork出新的进程处理并发连接请求。但boa支持cgi,能够为cgi程序fork出一个进程来执行。Boa的设计目标是速度和安全,在其站点公布的性能测试中,boa的性能要好于apache服务器。

随着网络技术的迅猛发展,在嵌入式设备的管理和交互中,基于Web方式的应用成为目前的主流,用户可以直接通过远程登录的方式对设备进行管理和维护,大大方便了使用性。下面就为大家讲解一下boa服务器在嵌入式Linux系统中的移植过程。

一、BOA服务器移植

工具链:gcc version 4.3.2 (crosstool-NG-1.8.1-none)

平台: 处理器:s3c2410 内核:linux-2.6.35

1.解压源码

tar xvf boa-0.94.13.tar.tar

cd boa-0.94.13

2.进入src/

./configure 生成Makefile

修改Makefile

修改CC = gcc 为 CC = arm-none-linux-gnueabi-gcc

修改CPP = gcc -E 为 CPP = arm-none-linux-gnueabi-gcc -E

3.make编译

编译一个linux下的c系统,包含词法和语法分析模块,Linux上用bison和flex。

yacc是一个文法分析器的生成器,bison即是yacc的GNU版本.Lex和YACC是用于构造词法分析机和语法解释器的工具,利用Lex和YACC你可以轻松的构造一个语法解释器。

Apt-get install bison flex

执行make

然后给boa瘦身

Arm-none-linux-gnueabi-strip boa

二、Boa服务器配置

1、 创建目录

mkdir /source/rootfs/etc/boa

2、 将boa源码目录下的boa.conf拷贝到/source/rootfs/etc/boa目录下

cp boa.conf /source/rootfs/etc/boa

3、 修改配置文件boa.conf

vim /source/rootfs/etc/boa

(1)Group的修改

修改 Group nogroup

为 Group 0

(2)user的修改

修改 User nobody

为 User 0

(3)ScriptAlias的修改

修改ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

为 ScriptAlias /cgi-bin/ /www/cgi-bin/

(5)DocumentRoot的修改

修改DocumentRoot /var/www

为DocumentRoot /www

(6)ServerName的设置

修改#ServerName www.your.org.here

为 ServerName www.your.org.here

否则会出现错误“gethostbyname::No such file or directory”

(7)AccessLog修改

修改AccessLog /var/log/boa/access_log

为#AccessLog /var/log/boa/access_log

(8)以下配置和boa.conf的配置有关,都是在ARM根文件系统中创建

以下步骤在开发板上进行:

创建HTML文档的主目录/www

mkdir /www

创建CGI脚本所在录 /www/cgi-bin

mkdir /www/cgi-bin

当不能使用cgi 时

将#AddType application/x-httpd-cgi cgi改为AddType application/x-httpd-cgi cgi

boa器测试

将boa拷贝到开发板根文件系统的/etc/boa下

#cp src/boa /source/rootfs/etc/boa

将ubuntu下/etc/mime.types拷贝到开发板根文件系统的/etc下

#cp /etc/mime.types /source/rootfs/etc

将你的主页index.html拷贝到www目录下

运行boa,然后在主机游览器输入开发板网址

[root@farsight boa]# ./boa

[30/10/2011:19:10:36 +0000] [root@farsight boa]# boa: server version Boa/0.94.13

[30/10/2011:19:10:36 +0000] boa: server built 10 30 2011 at 19:10:36

[30/10/2011:19:10:36 +0000] boa: starting server pid=968, port 80

附1):boa配置文件参数说明

boa的配置文件是/etc/boa/boa.conf。

Port:boa服务器监听的端口,默认的端口是80。如果端口小于1024,则必须是root用户启动服务器。

Listen:绑定的ip地址。不使用这个参数时,将绑定所有的地址。

User:连接到服务器的客户端的身份,可以是用户名或UID。

Group:连接到服务器的客户端的组,可以是组名或GID。

ServerAdmin:服务器出故障时要通知的邮箱地址。

ErrorLog:指定错误日志文件。如果路径没有以“/”开始,则相对于ServerRoot路径。没有配置时默认的文件是/dev/stderr。若不想记录日志,指定文件为/dev/null。

AccessLog:设置存取日志文件,与ErrorLog类似。

UseLocaltime:设置使用本地时间,使用UTC时注释这个参数。这个参数没有值。

VerboseCGILogs:在错误日志文件中记录CGI启动和停止时间,若不记录,注释这个参数。这个参数没有值。

ServerName:指定服务器的名称,当客户端使用gethostname + gethostbyname时返回给客户端。

VirtualHost:虚拟主机开关。使用此参数,则会在DocumentRoot设定的目录添加一个ip地址作为新的DocumentRoot来 处理客户端的请求。如DocumentRoot设置为/var/www,则http://localhost/ 则转换成/var/www/127.0.0.1/,若注释此参数,则为/var/www/。

DocumentRoot:HTML文件的根目录(也就是网站的目录)。

UserDir:指定用户目录。

DirectoryIndex:指定预生成目录信息的文件,注释此变量将使用DirectoryMaker变量。这个变量也就是设置默认主页的文件名。

DirectoryMaker:指定用于生成目录的程序,注释此变量将不允许列目录。

DirectoryCache:当DirectoryIndex文件不存在,而DirecotryMaker又被注释掉时,将列出这个参数指定目录给客户端。

KeepAliveMax:每个连接允许的请求数量。如果将此值设为" 0 ",将不限制请求的数目。

KeepAliveTimeOut:在关闭持久连接前等待下一个请求的秒数。(秒)。

MimeTypes:设置包含mimetypes信息的文件,一般是/etc/mime.types。

DefaultType:默认的mimetype类型,一般是text/html。

CGIPath:相当于给CGI程序使用的$PATH变量。

SinglePostLimit:一次POST允许大的字节数,默认是1MB.

AddType: 增加MimeType没有指定的类型,例: AddType type extension [extension ...]。要使用cgi,必须添加cgi类型:AddType application/x-httpd-cgi cgi

Redirect:重定向文件

Aliases:指定路径的别名。

ScriptAlias:指定脚本路径的虚拟路径。

附2):编译中的出错处理

报错:[01/Jan/1970:00:56:51 +0000] log.c:73 - unable to dup2 the error log: Bad file descriptor

解决:修改 src/log.c

注释掉

if (dup2(error_log, STDERR_FILENO) == -1) {

DIE("unable to dup2 the error log");

}

为:

/*if (dup2(error_log, STDERR_FILENO) == -1) {

DIE("unable to dup2 the error log");

}*/

再次执行boa命令

#boa

报错:[01/Jan/1970:01:01:15 +0000] boa.c:211 - getpwuid: No such file or directory

解决:修改src/boa.c

注释掉下面两句话:

if (passwdbuf == NULL) {

DIE(”getpwuid”);

}

if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {

DIE(”initgroups”);

}

#if 0

if (passwdbuf == NULL) {

DIE(”getpwuid”);

}

if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {

DIE(”initgroups”);

}

#endif

再次运行boa命令

报错:[01/Jan/1970:01:04:24 +0000] boa.c:226 - icky Linux kernel bug!: No such file or directory

解决:src/boa.c

if (setuid(0) != -1) {

DIE(”icky Linux kernel bug!”);

}

#if 0

if (setuid(0) != -1) {

DIE(”icky Linux kernel bug!”);

}

#endif

util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token

make: *** [util.o] Error 1

报错:修改 src/compat.h

找到

#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff

修改成

#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff

嵌入式转linux服务器,嵌入式Linux中的Web服务器应用相关推荐

  1. 怎么制作web服务器iis,IIS中搭建web服务器

    IIS中搭建web服务器 前面的博文中和大家聊了如何在Windows Server 2012 R2的环境下搭建IIS服务器,今天我们就继续和大家聊聊如何在我们的IIS服务器中搭建一个WEB服务器,从而 ...

  2. 25. Linux中的web服务器Apache

    Lesson25 Linux中的web服务器Apache 文章目录 1. 什么是Apache服务器 2. 什么是http协议 3. Apache的基础信息 4. 实验环境配置 5. 在desktop虚 ...

  3. 【CentOS Linux 7】实验6【web服务器搭建与管理】

    Linux系统及应用---调研报告 [Linux CentOS 7]实验1[VMware安装.新建虚拟机:63个基础命令运行结果图] [Linux CentOS 7]实验2[Shell编程及应用] [ ...

  4. 利用LVS(Linux Virtual Server)系统实现Web服务器集群的负载均衡

    利用LVS(Linux Virtual Server)系统实现Web服务器集群的负载均衡 LVS系统结构与特点: 1. Linux Virtual Server:简称LVS.是基于Linux服务器集群 ...

  5. 虚拟机web服务器配置ppt,在Linux虚拟机下配置apache构建web服务器.doc

    在Linux虚拟机下配置apache构建web服务器.doc 上传人:清**** 文档编号:55209606 上传时间:2020-03-08 格式:DOC 页数:2 大小:32.50KB 下载提示(请 ...

  6. [Linux]Red Hat Linux 9.0环境下架设Web服务器[2]

    5.MaxKeepAliveRequests 当使用保持连接(Persistent Connection)功能时,可以使用本参数决定每次连接所能发出的要求数目的上限.如果此数值为0,则表示没有限制.建 ...

  7. Java中常用WEB服务器和应用服务器

    一.web服务器和应用服务器的区别 Web服务器传送页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods).确切一点,你可以说:Web服务器专门处理 ...

  8. 宿主如何访问虚拟机中的web服务器

    宿主:win10专业版 虚拟机:VMware 12 pro 虚拟机系统:Ubuntu 16.04 LTS Web服务器:Apache(xampp) (图中选的是桥接模式,NAT模式也行.) Ubunt ...

  9. 在TMG2010中发布Web服务器场

    在许多情况下,我们使用TMG2010(或ISA Server 2006)发布单一的Web服务器,这适合对可靠性与性能要求不高的单位.如果用户对网站的响应要求比较高,并且要求实时在线并且需要提供容灾能力 ...

  10. 服务器w8系统如何重装,如何在Win8系统中搭建Web服务器

    对于网站开始人员来说,搭建WEB服务器是实现开发的第一步,那么在Win8系统中怎么搭建Web服务器呢?下面是学习啦小编给大家整理的一些有关在Win8系统中搭建Web服务器的方法,希望对大家有帮助! 在 ...

最新文章

  1. mysql连接hang住问题分析
  2. 前端人员如何模拟慢网速环境
  3. 关于跨域请求的二三事
  4. 财务用计算机可以一次摊销,购入的电脑可以一次性计提折旧吗
  5. sparkstreaming直接从kafka消费数据
  6. Qt工作笔记-打开指定文件夹
  7. php获取继承类方法吗,php如何获取当前类名,继承中的问题?
  8. 调焦后焦实现不同距离成像_红外成像光学系统进展与展望
  9. 如何有效练肩部肌肉增加肩宽并且避免斜方肌发达呢?
  10. mysql数据库实现修改密码代码_MySQL数据库的更改密码(附源代码)
  11. DAX CRM 模块中需要注意的地方
  12. RestTemplate 发送文件
  13. npm与package.json详解
  14. 新猿木子李:0基础学python培训教程 Python操作Excel之读取数据
  15. 有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。
  16. Linux下硬盘加密
  17. openwrt配置doh
  18. 李宏毅2021春季机器学习课程视频笔记1:Introduction, Colab PyTorch Tutorials, HW1
  19. 手把手教写拖拽布局插件(拖拽功能篇)
  20. 项目管理全过程最佳实践(上)

热门文章

  1. 查询SQL中日期条件
  2. Q96:PT(3.4):砂岩纹理(Sandstone Texture)
  3. 联想X61-Xp系统重装Ubuntu21.10
  4. 大数据可视化有哪些优势
  5. 物联网卡有哪几种类型
  6. oracle 单表查重,Oracle如何用单字段或多字段进行查重
  7. cad字体hztxt用什么代替_为什么CAD的字体库相同但打开图纸的效果却不同?
  8. php常用标签,PHP 过滤常用标签的正则表达式
  9. android 发送按键 0,android monitor tool (8.0 模拟发送按键及触摸屏事件实现)
  10. Trie(字典)树详解