物联网网关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文件中设定)。

    <html> <body>

    Hello E2000-Pi BOA.

    </body> </html>
  • 启动boa服务器

    $sudo boa

  • 浏览器访问

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

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

常见问题:

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

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

相关推荐
Thanks_ks7 小时前
深入剖析物联网边缘计算技术:架构、应用与挑战
物联网·边缘计算·应用场景·技术架构·安全隐私·资源受限·标准化挑战
Lin_XXiang13 小时前
java对接bacnet ip协议(跨网段方式)
java·物联网
安科瑞刘鸿鹏13 小时前
破解高原运维难题:分布式光伏智能监控系统的应用研究
运维·物联网·安全
脾气超好的钢铁侠19 小时前
《深入协议层:tlmqtt如何通过自定义编解码器实现高性能MQTT Broker》
物联网
搬码临时工20 小时前
内网怎么映射外网ip? 内网的地址快速映射给外网访问用方法
运维·服务器·网络·物联网·网络协议·tcp/ip·智能路由器
xhload3d1 天前
图扑软件 | 带你体验 Low Poly 卡通三维世界
物联网·3d·智慧城市·html5·webgl·数字孪生·可视化·工业互联网·三维建模·工控·轻量化·中国风·卡通动画·写实风格·科技风·low poly
Despacito0o1 天前
深入浅出MQTT协议:从物联网基础到实战应用全解析
java·物联网·struts
神一样的老师2 天前
工业物联网中的事件驱动采样架构及优化
物联网·架构
十年小站2 天前
物联网基础概念
物联网
电子科技圈3 天前
芯科科技推出首批第三代无线开发平台SoC,高度集成的解决方案推动下一波物联网实现突破
嵌入式硬件·mcu·物联网·网络安全·智能家居·智能硬件·iot