物联网网关Web服务器--Boa服务器移植与测试

1、Boa服务器介绍

BOA 服务器是一个小巧高效的web服务器,是一个运行于unix或linux下的,支持CGI的、适合于嵌入式系统的单任务的http服务器,源代码开放、性能高。

Boa 嵌入式 web 服务器的官方网站是http://www.boa.org/

特点

  • 轻量级:Boa 占用的系统资源极少,可在资源有限的嵌入式设备上高效运行,如路由器、智能家居设备等。

  • 开源:其源代码开放,便于开发者根据自身需求进行定制和优化,降低开发成本。

  • 简单易用:配置文件简单直观,易于理解和修改,降低了服务器的部署和管理难度。

  • 支持 CGI:支持通用网关接口(CGI),允许服务器与外部程序交互,实现动态网页功能。

工作原理

  • 网络连接处理:Boa 服务器监听指定的端口,等待客户端的连接请求。当有客户端发起连接时,服务器接受连接,并为该连接创建一个新的进程或线程来处理客户端的请求。

  • 请求解析:服务器接收客户端发送的 HTTP 请求,对请求进行解析,包括请求的方法(如 GET、POST 等)、请求的资源路径、请求头信息等。

  • 资源处理:根据请求的资源路径,服务器在文件系统中查找对应的资源文件。如果请求的是静态资源,如 HTML 文件、图片、CSS 文件等,服务器直接将该资源文件读取并发送给客户端。如果请求的是动态资源,如 CGI 脚本,服务器会调用相应的 CGI 程序来处理请求,并将 CGI 程序的输出结果发送给客户端。

  • 响应生成与发送:服务器根据请求的处理结果,生成 HTTP 响应消息,包括响应状态码、响应头信息和响应体。然后将响应消息发送给客户端,关闭连接。

应用场景

  • 智能家居控制:智能家居设备可以通过 Boa 服务器提供 Web 界面,用户通过浏览器即可方便地控制家电设备、查看环境数据等。

  • 工业自动化监控:在工业自动化领域,Boa 服务器可以用于搭建监控系统,实现对生产设备的远程监控和管理。

  • 物联网设备管理:物联网设备通常需要与云端或其他设备进行通信和交互,Boa 服务器可以作为设备的本地 Web 服务器,提供设备管理和配置的接口。

2、Boa服务器的编译

从www.boa.org下载Boa源码,当前最新版本为0.94.13,将其解压并进入源码目录的src子目录。

复制代码
tar xzf boa-0.94.13.tar.gz

通过配置命令生成Makefile文件, 然后运行make进行编译,得到的可执行程序为boa。

复制代码
//飞腾派OS系统编译boa服务器时会报缺少yacc、lex工具,通过下述命令安装
sudo apt-get install bison
sudo apt-get install flex
./configure
make

编译错误

复制代码
将src下boa.c的第226行注释掉,重新编译下载即可。

225	if(setuid(0) != -1) {
226	//	DIE("icky Linux kernel bug!");
227	}
复制代码
修改compat.h中的
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
为:
#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff
复制代码
修改config.c中相关变量定义前加上extren
extern char *error_log_name;
extern char *access_log_name;
extern char *cgi_log_name; 

编译成功后会生成boa的可执行文件,可以当前目录通过sudo ./boa命令执行,或复制到/sbin目录通过sudo boa执行。

3、Boa服务器的配置

boa启动时需要一个配置文件boa.conf,该文件的缺省目录目录是:/etc/boa/,需要从源码目录中复制到/etc目录下。

复制代码
$sudo mkdir /etc/boa
$sudo cp boa-0.94.13/boa.conf /etc/boa/
$sudo vim /etc/boa/boa.conf

(配置的时候,配置文件的目录可根据自己的情况设置路径,主要考虑到可写问题)

boa启动时需要一个配置文件boa.conf,该文件的缺省目录由src/defines.h文件的SERVER_ROOT定义,或者在启动boa的时候通过参数"-c"指定。其中指定的默认目录是:/etc/boa/

  1. 建立/etc/boa目录, 并复制boa.conf到/etc/boa目录下,并按照以下步骤进行修改。

  2. 修改访问权限:修改User nobody 为 User 0 ; 修改Group nogroup 为 Group 0

  3. 设定日志目录:boa日志有两部分,Errorlog 和 AccessLog一般情况下为/var/log/boa/error_log 和 /var/log/boa/access_log两个文件。所以根据自己的情况情况设置日志目录:

ErrorLog /var/log/boa/error_log

AccessLog /var/log/boa/access_log

(注意:这里/var/log/boa目录必须为可写,否则会出项错误:log.c:73 -- Unable to dup2 the error log: Bad file r.)

复制代码
//修订访问权限
User 0
Group 0
//修改html文件在开发板的存放目录
DocumentRoot /home/user/boa_test/www/
//修改cgi文件在开发板的存放目录
ScriptAlias /cgi-bin/ /home/user/boa_test/www/cgi-bin/
  • 开发板目录与文件设置

    //创建boa日志目录与相关文件
    sudo mkdir /var/log/boa sudo touch /var/log/boa/error_log
    sudo touch /var/log/boa/access_log //设置可读写权限 sudo chmod 666 /var/log/boa/*

4、Boa服务器使用

  • WEB服务器首页文件index.html

    写一个最简单的index.html文件,放在/home/user/boa_test/www/目录下(boa.conf文件中设定)。

    Hello E2000-Pi BOA.

  • 启动boa服务器

    $sudo boa

  • 浏览器访问

保证你的电脑同开发板是在一个局域网中,相互的ip应可以ping通。

打开电脑中浏览器在地址栏输入开发板的ip,访问成功的显示的网页界面。

常见问题:

无法访问--服务器没有启动。

404 提示--服务器启动,没有对应网页文件。

相关推荐
兆龙电子单片机设计15 小时前
【STM32项目开源】STM32单片机语音分类垃圾桶-蓝牙APP
stm32·单片机·嵌入式硬件·物联网·开源·自动化·毕业设计
厦门辰迈智慧科技16 小时前
管网遥测终端机赋能城市安全的核心价值
物联网·遥测终端机·管网遥测终端机·排水管网遥测终端·管网遥测终端
七仔啊16 小时前
modbus快速入门
物联网
论迹复利1 天前
PSA Certified 是什么——物联网芯片安全认证的三级体系
物联网·struts·安全
MetrixAeroCore1 天前
AI玩具出海用物联网卡还是eSIM?200国漫游和本地落地卡成本差多少?
物联网
数智顾问1 天前
(84页PPT)PWC海科集团生物医药业务5年发展战略项目建议书(附下载方式)
大数据·人工智能·物联网
MetrixAeroCore1 天前
智能快递柜格口监控物联网卡在老旧小区弱网环境下多运营商切换组网方案
物联网
腻害兔1 天前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro IoT 物联网模块:从协议网关到物模型,一文讲透开源 IoT 平台架构
前端·vue.js·物联网·产品经理·ai编程
北京晶数信息科技1 天前
加油站成品油智慧监管系统项目建设实施汇报(一)
大数据·物联网·产品经理·需求分析
TurMass工程师1 天前
什么是 TurMass™ Mesh?它在电力物联网感知网络中起什么作用?
物联网·电力物联网·turmass·turmassmesh