Ubuntu部署BOA服务器

news2024/10/10 4:26:36

BOA服务器概述

BOA是一款非常小巧的Web服务器,源代码开放、性能优秀、支持CGI通用网关接口技术,特别适合用在嵌入式系统中。
BOA服务器主要功能是在互联嵌入式设备之间进行信息交互,达到通用网络对嵌入式设备进行监控,并将反馈信息自动上传给主控设备的目的。它是基于HTTP超文本传输协议的,Web网页是Web服务最基本的传输单元。嵌入式Web服务的工作基于客户机/服务器计算模型,由Web浏览器(客户机)和Web服务器(服务器)构成,也就是著名的B/S结构。运行与客户端的浏览器首先要与嵌入式Web服务器BOA端建立连接,打开一个套接字虚拟文件,此文件建立标志着socket连接建立成功然后客户端浏览器通过套接字socket以GET或者POST参数传递方式向Web服务器提交请求,Web浏览器提交请求后,用过HTTP协议传输给Web服务器。Web服务器接到请求后,根据请求的不同进行事务处理,返回HTML文件或者通过CGI调用外部应用程序,返回处理结果。服务器通过CGI与外部应用程序和脚本之间进行交互,根据客户端浏览器在请求时所采用的方法,服务器会搜集客户端所提供的信息,并将该部分信息发送给指定的CGI扩展程序,CGI扩展程序进行信息处理并将结果返回给服务器,然后服务器对信息进行分析,并将结果发送回客户端在浏览器上显示出来。

通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口。通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后结果返回给客户端。组成CGI通信的两部分:一是HTML页面,就是用户浏览器上现实的页面;二就是运行在服务器上的CGI程序。

与Apache等高性能的Web服务器的主要区别是,Boa是一个单进程服务器,适合于嵌入式的单任务http服务器。是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右。作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全。

BOA源码下载

官网地址:www.boa.org

BOA编译环境准备

将压缩包存放至服务器root目录下,并进行解压

tar -xvf boa-0.94.13.tar.gz

安装boa编译

cd boa-0.94.13
sudo apt-get install bison flex

 BOA /src目录下类库处理

1、修改defines.h文件,设置启动服务器时寻找boa.conf配置文件的路径。

/root/boa-0.94.13/src$ pwd
/root/boa-0.94.13/src
/root/boa-0.94.13/src$ vi defines.h  +30

//修改内容如下  注释30行 添加31行
 29 #ifndef SERVER_ROOT
 30 //#define SERVER_ROOT "/etc/boa"
 31 #define SERVER_ROOT "/root/boa"
 32 #endif

 2、修改compat.h 文件,在 compat.h 文件中的宏定义问题: ‘TIMEZONE_OFFSET’

/root/boa-0.94.13/src$ vi compat.h +120
找到
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改成
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff

  3、修改boa.c 文件,注释掉226-228行这三行注释掉,否则 boa 启动时会出现“boa.c:226 - icky linux kernel bug!: No suchfile or directory 错误”

/root/boa-0.94.13/src$vi boa.c +226

226         //if (setuid(0) != -1) {
227             //DIE("icky Linux kernel bug!");
228         //}

  4、修改log.c 文件,⑴注释掉73-75行这三行注释掉,log.c:73 - unable to dup2 the error log: Bad file descriptor;⑵config.c 中 使用了 log.c 中声明的变量 但 log.c 中未将这些变量 声明为 extern 类型,修改 log.c 31-33 行;

//解决log.c:73 - unable to dup2 the error log: Bad file descriptor;

/root/boa-0.94.13/src$ vi log.c +73

73         //if (dup2(error_log, STDERR_FILENO) == -1) {
74	         //DIE("unable to dup2 the error log");
75         //}

//解决multiple definition of `cgi_log_name'; config.o:/home/slocker/boa-0.94.13/src/config.c:63: first defined here,修改 log.c 31-33 行

//修改后
31 extern char *error_log_name;
32 extern char *access_log_name;
33 extern char *cgi_log_name;

  BOA 编译

1、生成Makefile`

/root/boa-0.94.13/src$ pwd
/root/boa-0.94.13/src
/root/boa-0.94.13/src$ ./configure 

2、编译

/root/boa-0.94.13/src$ pwd
/root/boa-0.94.13/src
/root/boa-0.94.13/src$ make -4j

   BOA 部署

1、创建BOA服务器目录

/root/boa-0.94.13/src$ mkdir -p ~/boa/bin
/root/boa-0.94.13/src$ mkdir ~/boa/log
/root/boa-0.94.13/src$ mkdir ~/boa/www
/root/boa-0.94.13/src$ mkdir ~/boa/www/cgi-bin
/root/boa-0.94.13/src$
/root/boa-0.94.13/src$ tree ~/boa
/root/boa
├── bin
├── log
└── www
    └── cgi-bin

4 directories, 0 files
/root/boa-0.94.13/src$

2、将可执行文件boa拷贝到/root/boa/bin目录下

/root/boa-0.94.13/src$ pwd
/root/boa-0.94.13/src
/root/boa-0.94.13/src$ cp boa ~/boa/bin/
/root/boa-0.94.13/src

3、将boa.conf拷贝到~/boa/目录下

/root/boa-0.94.13$ pwd
/root/boa-0.94.13
/root/boa-0.94.13$ cp boa.conf ~/boa/
/root/boa-0.94.13

4、修改配置文件boa.conf

/root/boa$ pwd
/root/boa
/root/boa$ vi boa.conf
/root/boa

25 Port 80

48 #User nobody
49 #Group nogroup
50 User 0
51 Group 0

64 ErrorLog /root/boa/log/error_log

76 AccessLog /root/boa/log/access_log

113 DocumentRoot /root/boa/www

157 MimeTypes /root/boa/mime.types

166 CGIPath /bin

175 AddType application/x-httpd-cgi cgi

195 ScriptAlias /cgi-bin/ /root/boa/www/cgi-bin/

5、创建log和拷贝mime文件

/root$ cp /etc/mime.types ~/boa
/root/boa/log$ mkdir error_log
/root/boa/log$ mkdir access_log

6、创建index.html

/root/boa/www$ mkdir index.html
/root/boa/www$ vi index.html


<!DOCTYPE html>
<html lang="en">


<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Boa Web Server</title>
</head>


<body>
    <h1>Boa Web Server</h1>
</body>


</html>

7、创建CGI文件, test.c

/root/boa/www/cgi-bin$ mkdir test.c
/root/boa/www/cgi-bin$ vi test.c


#include <stdio.h>  
int main()  
{  
  printf("Content-type:text/html\n\n"); //这句一定要加上  
  printf("<html><body>");  
  printf("<font style=\"color:red; font-size:30px;\">Hello, CGI!</font><br/>");  
  printf("<a href=\"/index.html\">return index.html</a>");  
  printf("</body></html>");  
  return 0;  
} 

 8、启动服务器

/root/boa/bin$ ./boa
/root/boa/bin$ ps -a | grep "boa"

4490 pts/1    00:00:00 boa
/root/boa/bin$

 9、测试,浏览器输入http://192.168.100.129/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1568172.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MPLS-基础、LSR、LSP、标签、体系结构

MPLS技术 MPLS基础 MPLS&#xff1a;转发数据时&#xff0c;只在网络边缘分析IP报文头&#xff0c;不在每一跳都分析&#xff0c;节约了转发时间。 MPLS&#xff1a;Multiprotocol Label Switching&#xff0c;多协议标签交换骨干网技术。主要应用&#xff1a;VPN、流量工程…

基于wordcloud、matplotlib等对某东评论数据情感分析-Python数据分析项目

基于wordcloud、matplotlib等对某东评论数据情感分析 文章目录 基于wordcloud、matplotlib等对某东评论数据情感分析1 数据导入及预处理1.1 数据导入1.2 数据描述1.3 数据预处理 2 情感分析2.1 情感分析2.2 情感分直方图2.3 词云图2.4 关键词提取 3 积极评论与消极评论3.1 积极…

【番外篇1】统计学+spss-t检验

目录 t检验 独立样本 t 检验 p值 spss如何分析独立样本t检验 配对样本t检验 单样本t检验 t检验 当我们想要比较两组数据&#xff08;比如两组学生的成绩&#xff09;是否真的有显著差异时&#xff0c;就可以使用 t 检验。 t 检验告诉我们&#xff0c;这种差异是不是真的…

深入解析Hadoop生态核心组件:HDFS、MapReduce和YARN

这里写目录标题 01HDFS02Yarn03Hive04HBase1&#xff0e;特点2&#xff0e;存储 05Spark及Spark Streaming关于作者&#xff1a;推荐理由&#xff1a;作者直播推荐&#xff1a; 一篇讲明白 Hadoop 生态的三大部件 进入大数据阶段就意味着进入NoSQL阶段&#xff0c;更多的是面向…

@Order和@DependsOn的区别

这里写自定义目录标题 一、区别二、demo演示1、Order2、DependsOn 一、区别 Order&#xff1a;改变Bean注入的顺序DependsOn&#xff1a;改变Bean创建的顺序 二、demo演示 1、Order 类 A B 都实现了接口 I &#xff0c;且 A B都由Spring容器创建并且管理 public class A im…

.NET CORE 分布式事务(四) CAP实现最终一致性

目录 引言&#xff1a; 1.0 最终一致性介绍 2.0 CAP 2.0 架构预览 3.0 .NET CORE 结合CAP实现最终一致性分布式事务 3.1 准备工作(数据库&#xff0c;本文使用的是MySql) 3.1.1 数据模型 3.1.2 DbContext 3.1.3 数据库最终生成 3.2 Nuget引入 3.3 appsettings.json …

FressRTOS_day4:2024/4/4

1.总结二进制信号量和计数型信号量的区别&#xff0c;以及他们的使用场景。 二进制信号量的数值只有0和1。&#xff08;用于共享资源的访问&#xff09;&#xff1b;而计数型信号量的值一般是大于或者等于2&#xff08;用于生产者和消费者模型&#xff09; 2.使用计数型信号量…

安装Schedule库的方法最终解答!_Python第三方库

安装Python第三方库Schedule 我的环境&#xff1a;Window10&#xff0c;Python3.7&#xff0c;Anaconda3&#xff0c;Pycharm2023.1.3 Schedule库 Schedule 是一个轻量级、功能强大而灵活的任务调度工具库&#xff0c;用于在指定的时间间隔内执行任务。为用户提供了简单易用的…

树(Tree) - 概念与基础

树的基本概念 树(Tree)是一种重要的数据结构&#xff0c;它在计算机科学中被广泛应用于各种算法和程序中。树是由节点(node)组成的层次结构&#xff0c;其中每个节点都有一个父节点&#xff0c;除了根节点外&#xff0c;每个节点都有零个或多个子节点。树的一个关键特点是没有…

Java云联his系统,支持电子病历四级,医院信息管理系统源码

SaaS模式Java语言开发的云HIS系统源码&#xff0c;支持电子病历四级&#xff0c;系统充分考虑了模板化、配置化、智能化、扩展化等设计方法&#xff0c;覆盖了基层医疗机构的主要工作流程&#xff0c;能够与监管系统有序对接&#xff0c;并能满足未来系统扩展的需要。 云HIS系统…

matlab使用教程(33)—求解时滞微分方程(1)

1.时滞微分方程(DDE)的分类 时滞微分方程 (DDE) 是当前时间的解与过去时间的解相关的常微分方程。该时滞可以固定不变、与时间相关、与状态相关或与导数相关。要开始积分&#xff0c;通常必须提供历史解&#xff0c;以便求解器可以获取初始积分点之前的时间的解。 1.1常时滞 D…

二维动画制作软件 Animate 2024 for mac激活版

Animate 2024 for Mac是一款功能强大的二维动画制作软件&#xff0c;专为Mac用户打造。它提供了丰富的动画编辑功能&#xff0c;使用户能够轻松创建出生动逼真的动画作品。无论是短片、广告还是游戏等应用领域&#xff0c;Animate 2024都能发挥出出色的表现。 软件下载&#xf…

ArcGIS Pro导出布局时去除在线地图水印

目录 一、背景 二、解决方法 一、背景 在ArcGIS Pro中经常会用到软件自带的在线地图&#xff0c;但是在导出布局时&#xff0c;图片右下方会自带地图的水印 二、解决方法 解决方法&#xff1a;添加动态文本--服务图层制作者名单&#xff0c;然后在布局中选定位置添加 在状…

基于 Docker 的 python grpc quickstart

工作之后一直使用的 RPC 框架是 Apache 的 thrift&#xff0c;现在发现 grpc 更流行&#xff0c;所以也要学习一下&#xff0c;先来简单的跑一下 demo。在本地安装运行也很方便&#xff0c;不过因为有了 docker&#xff0c;所以在 docker 里面安装运行隔离性更好&#xff0c;顺…

多线程--深入探究多线程的重点,难点以及常考点线程安全问题

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

【机器学习】K-近邻算法(KNN)介绍、应用及文本分类实现

一、引言 1.1 K-近邻算法&#xff08;KNN&#xff09;的基本概念 K-近邻算法&#xff08;K-Nearest Neighbors&#xff0c;简称KNN&#xff09;是一种基于实例的学习算法&#xff0c;它利用训练数据集中与待分类样本最相似的K个样本的类别来判断待分类样本所属的类别。KNN算法…

STM32工程 如何设置堆栈大小(Heap和Stack)

方法1&#xff1a;通过CubeMX、CubeIDE 配置 方法2&#xff1a;直接在启动文件中修改 &#xff08;适合所有Keil工程&#xff09; Heap、Stack的值大小&#xff0c;不管使用哪种开发环境&#xff0c;它俩都肯定在启动文件中。 可以通过CtrlF&#xff0c;搜索: Heap&#xff0…

iOS开发之Swift标识符

iOS开发之Swift标识符 在iOS开发中&#xff0c;使用Swift语言时&#xff0c;标识符是用来命名变量、常量、函数、类、结构体、枚举等程序实体的&#xff1b; 这些标识符使得Swift代码更加清晰、易于理解和维护。 一、变量与常量&#xff1a;var、let var代表variable&#…

算法练习—day1

title: 算法练习—day1 date: 2024-04-03 21:49:55 tags: 算法 categories:LeetCode typora-root-url: 算法练习—day1 网址&#xff1a;https://red568.github.io 704. 二分查找 题目&#xff1a; 题目分析&#xff1a; 左右指针分别为[left,right]&#xff0c;每次都取中…

X86平台下Linux系统安装部署KVM,以及KVM一些配置

环境&#xff1a;银河麒麟SP1-V2303系统&#xff0c;X86架构&#xff0c;目标虚拟机为win10 一、安装 1.APT源安装 sudo apt install qemu qemu-kvm bridge-utils virt-manager libguestfs-tools qemu-system qemu-efi qemu-utils libvirt-clients libvirt-daemon-system …