Ubuntu部署BOA服务器

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_ROOT30 //#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 +226226         //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 +7373         //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-bin4 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/boa25 Port 8048 #User nobody
49 #Group nogroup
50 User 0
51 Group 064 ErrorLog /root/boa/log/error_log76 AccessLog /root/boa/log/access_log113 DocumentRoot /root/boa/www157 MimeTypes /root/boa/mime.types195 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.mzph.cn/news/784988.shtml

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

相关文章

Go的数据结构与实现【Binary Search Tree】

介绍 本文用Go将实现二叉搜索树数据结构&#xff0c;以及常见的一些方法 二叉树 二叉树是一种递归数据结构&#xff0c;其中每个节点最多可以有两个子节点。 二叉树的一种常见类型是二叉搜索树&#xff0c;其中每个节点的值都大于或等于左子树中的节点值&#xff0c;并且小…

Unbtun-arach64架构安装PySide2(python3.6)

aarch平台是无法通过pip安装PySide2的&#xff0c;同时利用源码下载一直报错 1. 我是python3.6.9&#xff0c;在官网上找到对应的PySide2版本 5.15.2.所以首先在官网下载Qt5.15.2的源码&#xff1a;https://download.qt.io/archive/qt/5.15/5.15.2/single/ 2. 编译qt环境 aar…

Seata(分布式事务实例环境搭建)

文章目录 1.基本介绍1.引出Seata2.问题分析 2.Seata的安装和配置1.解压到d盘2.修改D:\seata\conf\file.conf文件1.修改事务组2.修改日志存储模式为db3.修改数据库&#xff08;MySQL5.7&#xff09;连接信息4.创建seata数据库5.复制db_store.sql的内容&#xff0c;创建需要的表6…

Web实例_报表开发01-基于HTML进行报表呈现

Web实例_报表开发01-基于HTML进行报表呈现 报表开发是一种在利用了软件的基础上, 针对不同类型的报表, 进行开放的工作。 而以报表的方式, 将相关的内容、数值呈现出来的话, 则会起到更好的概况作用。 再加上, 报表开发工作是依托于计算机来完成的, 因此在效率、完整性等方面…

红酒:分类视角下的红酒品质评估与标准制定

在红酒的世界中&#xff0c;品质的评估与标准的制定对于维护消费者权益、促进行业健康发展具有重要意义。云仓酒庄雷盛红酒作为业界持续发展品牌&#xff0c;从分类的视角出发&#xff0c;对红酒品质进行了多方的评估&#xff0c;并积极参与制定相关的标准。 首先&#xff0c;从…

优思学院|工程经理应如何利用PDCA循环?

作为工程经理&#xff0c;理解PDCA&#xff08;计划-执行-检查-行动&#xff09;质量管理循环程序对于确保项目质量和持续改进是十分重要。 PDCA 最早由美国质量管理专家 Walter A. Shewhart (1939)提出&#xff0c;其后被戴明博士&#xff08;Dr. Deming&#xff09;所采用、…

【Linux】权限理解

权限理解 1. shell命令以及运行原理2. Linux权限的概念3. Linux权限管理3.1 文件访问者的分类&#xff08;人&#xff09;3.2 文件类型和访问权限&#xff08;事物属性&#xff09;3.2.1 文件类型3.2.2 基本权限 3.3 文件权限值的表示方法3.4 文件访问权限的相关设置方法3.4.1 …

基于energy score的out-of-distribution数据检测,LeCun都说好 | NerulPS 2020

论文提出用于out-of-distributions输入检测的energy-based方案&#xff0c;通过非概率的energy score区分in-distribution数据和out-of-distribution数据。不同于softmax置信度&#xff0c;energy score能够对齐输入数据的密度&#xff0c;提升OOD检测的准确率&#xff0c;对算…

【JAVA】java基础(分支结构)洛谷刷题(含图解:吃苹果)

题目&#xff1a; 解析 代码 import java.util.Scanner;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner input new Scanner(System.in);int apple,time,rate; appleinput.nextInt(); rateinput.nextInt(); timeinpu…

专题【链表】刷题日记

题目列表 学习题(22题) 2024.03.31 两数相加 19. 删除链表的倒数第 N 个结点 合并K个升序链表 2024.04.01 24. 两两交换链表中的节点 25. K 个一组翻转链表 61. 旋转链表 83. 删除排序链表中的重复元素 82. 删除排序链表中的重复元素 II 86. 分隔链表 92. 反转链表 II 1…

【STM32嵌入式系统设计与开发】——14PWM(pwm脉宽输入应用)

这里写目录标题 一、任务描述二、任务实施1、WWDG工程文件夹创建2、函数编辑&#xff08;1&#xff09;主函数编辑&#xff08;2&#xff09;USART1初始化函数(usart1_init())&#xff08;3&#xff09;USART数据发送函数&#xff08; USART1_Send_Data&#xff08;&#xff09…

服务器安全事件应急响应排查方法

针对服务器操作系统的安全事件也非常多的。攻击方式主要是弱口令攻击、远程溢出攻击及其他应用漏洞攻击等。分析安全事件&#xff0c;找到入侵源&#xff0c;修复漏洞&#xff0c;总结经验&#xff0c;避免再次出现安全事件&#xff0c;以下是参考网络上文章&#xff0c;总结的…

初识编译和链接(C语言)

文章目录 编译和链接翻译环境预处理编译汇编链接 运行环境 编译和链接 编译和链接这两个大的过程构成了翻译环境。 其实&#xff0c;在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 一个环境是翻译环境&#xff0c;另一个是执行环境。 翻译环境中&#xff0c;源…

【软件工程】详细设计(一)

1. 引言 1.1 编写目的 该文档的目的是描述《学生成绩管理系统》项目的详细设计&#xff0c;其主要内容包括&#xff1a; 系统功能简介 系统详细设计简述 各个模块的实现逻辑 最小模块组件的伪代码 本文档的预期的读者是&#xff1a; 开发人员 项目管理人员 测试人员 …

基于单片机汽车超声波防盗系统设计

**单片机设计介绍&#xff0c;基于单片机汽车超声波防盗系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机汽车超声波防盗系统设计概要主要涉及利用超声波传感器和单片机技术来实现汽车的安全防盗功能。以下是对…

八股 -- C#

面向对象 &#xff08;三大特性&#xff09; 三大特性目的是为了提供更好的代码组织、可维护性、扩展性和重用性 C#基础——面向对象 - 知乎 (zhihu.com) 封装 理解&#xff1a; 你不需要了解这个方法里面写了什么代码&#xff0c;你只需要了解这个方法能够给你返回什么数据&…

位运算 ----力扣2220

2220. 转换数字的最少位翻转次数 提示 一次 位翻转 定义为将数字 x 二进制中的一个位进行 翻转 操作&#xff0c;即将 0 变成 1 &#xff0c;或者将 1 变成 0 。 比方说&#xff0c;x 7 &#xff0c;二进制表示为 111 &#xff0c;我们可以选择任意一个位&#xff08;包含没有…

书生·浦语大模型-第一节课笔记

视频总结 23年发布的模型在一些材料中归位指令微调模型&#xff0c;后面逐渐升级应该已经是train的模型了 技术报告总结 InternLM2 Technical Report 评测与特点 6 dimensions and 30 benchmarks, long-context modeling, and open-ended subjective evaluations长文本…

猜数游戏(Python)

一、实验要求&#xff1a; &#xff08;1&#xff09;在游戏开始时&#xff0c;随机生成一个1~100之间的整数。 &#xff08;2&#xff09;在游戏中&#xff0c;玩家有10次机会猜数。如果10次都没有猜中&#xff0c;则游戏失败&#xff1b;否则&#xff0c;游戏成功。 &…

centos7.5安装gitlab-runner,配置CI/CD流水线

一般不建议gitlab-server和gitlab-runner装在同一台服务器 第一步&#xff1a;安装gitlab-runner,最好和gitlab实例版本一致 # 下载官方gitlab-runner安装脚本 curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | s…