概述
BOA是一种非常小巧的web服务器,用来负责处理客户端或者是浏览器端的http请求,因为其特性小巧,性能优秀,故而适合应用于嵌入式系统。
BOA简介
其可执行代码只有大约60KB左右,Boa是一个单任务的HTTP服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。Boa支持CGI。 Boa的设计目标是速度和安全。(CGI只是一个进程,用来提供接口),自动目录生成和自动文件枪支进行拼接。 Boa的主要设计目标是速度和安全性。安全性在“不能被恶意用户破坏”的意义上,不是“细粒度访问控制和加密通信”。
特点:可靠性和可移植性,Boa不是作为功能强大的服务器。 开发平台:GNU / Linux是目前的开发平台。
BOA移植过程
- 下载boa源码,本文使用的是
1.进入boa官网下载
http://www.boa.org/
2.CSDN直接下载
https://download.csdn.net/download/qq_42368385/86267519
- 解压文件,并进入./boa-0.94.13/src目录
cd ./boa-0.94.13/src/
- 执行./configure配置编译环境
linux@linux:~/boa-0.94.13/src$ ./configure
- make编译源码
linux@linux:~/boa-0.94.13/src$ make
make编译会出现错误: compat.h:120:30: note: in definition of macro ‘TIMEZONE_OFFSET’ #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff ^ make: *** [util.o] Error 1
解决方法: (1)修改compat.h 的第120行代码 (2)修改boa.c 的第225行代码
linux@linux:~/boa-0.94.13/src$ vim compat.h +120
将
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
改成:
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
linux@linux:~/boa-0.94.13/src$ vim boa.c +225
将这几行代码注释掉:
if (setuid(0) != -1) {
DIE("icky Linux kernel bug!");
}
改为:
#if 0 //注释掉
if (setuid(0) != -1) {
DIE("icky Linux kernel bug!");
}
#endif
清楚一下刚刚编译生成的文件,重新编译
linux@linux:~/boa-0.94.13/src$ make clean
linux@linux:~/boa-0.94.13/src$ make
5.创建boa安装目录 /boa
mkdir -p /home/linux/boa /home/linux/boa/www /home/linux/boa/cgi-bin /home/linux/boa/log
6.复制前面编译生成的boa 文件到创建的boa文件夹下,修改boa-0.94.13文件夹下的defines.h文件中的SERVER_ROOT,使其指向前面创建的文件路径
linux@linux:~/boa-0.94.13/src$ sudo cp boa /home/linux/boa/
linux@linux:~/boa-0.94.13/src$ vi defines.h +30
将第30行:
#define SERVER_ROOT "/etc/boa"
指定的路径改为前面创建的文件路径:
#define SERVER_ROOT "/home/linux/boa"
7.复制必要的文件到安装目录
linux@linux:~/boa-0.94.13/src$ cp boa /home/linux/boa/
linux@linux:~/boa-0.94.13/src$ cp boa_indexer /home/linux/boa/
linux@linux:~/boa-0.94.13/src$ cp /etc/mime.types /home/linux/boa/
linux@linux:~/boa-0.94.13/src$ cd ..
linux@linux:~/boa-0.94.13$ cp boa.conf /home/linux/boa/
8.修改boa配置文件
linux@linux:~/boa$ ls
boa boa.conf boa_indexer cgi-bin log mime.types www
linux@linux:~/boa$ cp boa.conf boa.conf.back
linux@linux:~/boa$ cat boa.conf.back | grep -v "#" | grep -v "^$" > boa.conf
linux@linux:~/boa$ vim boa.conf
将内容改为:
Port 80
User 0
Group 0
ErrorLog /home/linux/boa/log/error_log
AccessLog /home/linux/boa/log/access_log
DocumentRoot /home/linux/boa/www
UserDir public_html
DirectoryIndex index.html
DirectoryMaker /home/linux/boa/boa_indexer
KeepAliveMax 1000
KeepAliveTimeout 10
MimeTypes /home/linux/boa/mime.types
DefaultType text/plain
CGIPath /bin:/usr/bin:/usr/local/bin
Alias /doc /usr/doc
ScriptAlias /cgi-bin/ /home/linux/boa/cgi-bin/
9.index.html页面的实现
linux@linux:~/boa$ cd www/
linux@linux:~/boa/www$ vi index.html
在index.html中添加以下内容
<html>
<body>
<h3>this is a test!</h3><br/>
<img src="image.jpg"/>
<h3>tree picture</h3><br/>
<a href="/cgi-bin/test.cgi">to cgi page</a>
</body>
</html>
找一张图片放到与index.html的同级目录下
10.测试用的test.cgi生成
linux@linux:~/boa$ cd cgi-bin/
linux@linux:~/boa/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;
}
编译生成test.cgi
linux@linux:~/boa/cgi-bin$ gcc -o test.cgi test.c
linux@linux:~/boa/cgi-bin$ ls
test.c test.cgi
11.查看目录
linux@linux:~/boa$ tree
.
├── boa
├── boa.conf
├── boa.conf.back
├── boa_indexer
├── cgi-bin
│ ├── test.c
│ └── test.cgi
├── log
├── mime.types
└── www
├── core
├── image.jpg
└── index.html
3 directories, 10 files
12.验证效果
linux@linux:~/boa$ ./boa
然后打开浏览器输入127.0.0.1进行回环测试 就会出现这样的效果
注意:如果出现其他错误,确认路径有没有问题,出现make,拷贝boa文件过来
|