系统:ubuntu11.10
内核版本:linux-3.0.57
编译器:4.6.1
boa:boa-0.94.13
今天,看了boa服务器的一些操作,想在ubuntu下实现一个小的服务器,这里先介绍一下boa服务器, boa服务器是一个小巧高效的web服务器,是一个运行于unix或linux下的,支持CGI的、适合于嵌入式系统的单任务的http服务器,源代码开放、性能高。因为他的源码开放,谁都可以从他的官网下载(http://www.boa.org/),进行开发和学习。
boa Web服务器非常小巧,其源码包只有大约119KB左右。作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全。
1.下载源码包,官网在上面已经列出
输入命令: tar zxvf boa-0.94.13
2.进入 boa-0.94.13目录下的src/目录,
我们知道一个源程序要变成一个可执行文件,要经过 词法分析--> 语法分析 --> 语义分析 --> 中间代码生成 --> 对中间代码优化-->生成目标文件,编译一个linux下的c系统,也是这样的,包含词法和语法分析模块,不过Linux上用的是bison和flex。yacc是一个文法分析器的生成器,bison即是yacc的GNU版本。Lex和YACC是用于构造词法分析机和语法解释器的工具,利用Lex和YACC你可以轻松的构造一个语法解释器。
所以我们要先安装它们,输入命令:sudo apt-get install bison flex
你会看到一个.configure 文件
输入命令: sudo ./configure (如果不能执行,先修改它的权限,输入:chmod 777 .configuer)它会生成Makefile文件
3.然后输入:sudo make
好了,这里出现错误:
util.c: 在函数‘get_commonlog_time’中:
util.c:100:1: 错误: 毗连“t”和“->”不能给出一个有效的预处理标识符
make: *** [util.o] 错误 1
现在我们修改src目录下的 compat.h
找到:
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改成为:
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
再执行 :make,会在src目录下生成一个boa文件,
4.按需求修改主目录下的boa.conf文件,我没有改动,这是默认配置:
User nobody
Group nogroup
ErrorLog /var/log/boa/error_log
AccessLog /var/log/boa/access_log
DocumentRoot /var/www --------这个是web服务器启动/var/www 你的网页目录就是www
UserDir public_html
DirectoryIndex index.html --------服务器启动的时候要有一个主目录的索引文件,也就是默认首页,就是index.html
if(dup2(error_log, STDERR_FILENO) == -1)
{
DIE("unable to dup2 the error log");
}
6.然后再在src目录下 执行: ./boa 若出现:Cannot open /var/log/boa/access_log for logging: logfile open: No such file or directory,或者是其他的Cannot open /var/log/boa/error_log for logging: logfile open: No such file or directory
然后再./boa 此时boa服务器就已经启动,打开ubuntu浏览器,输入ubuntu的ip地址,就可以看到你放在/var/www里的网页了。ok
内核版本:linux-3.0.57
编译器:4.6.1
boa:boa-0.94.13
今天,看了boa服务器的一些操作,想在ubuntu下实现一个小的服务器,这里先介绍一下boa服务器, boa服务器是一个小巧高效的web服务器,是一个运行于unix或linux下的,支持CGI的、适合于嵌入式系统的单任务的http服务器,源代码开放、性能高。因为他的源码开放,谁都可以从他的官网下载(http://www.boa.org/),进行开发和学习。
boa Web服务器非常小巧,其源码包只有大约119KB左右。作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全。
我现在是实现在ubuntu上的boa服务(至于如何移植到开发板,我会在以后做)
按照下述步骤来:
1.下载源码包,官网在上面已经列出
输入命令: tar zxvf boa-0.94.13
2.进入 boa-0.94.13目录下的src/目录,
我们知道一个源程序要变成一个可执行文件,要经过 词法分析--> 语法分析 --> 语义分析 --> 中间代码生成 --> 对中间代码优化-->生成目标文件,编译一个linux下的c系统,也是这样的,包含词法和语法分析模块,不过Linux上用的是bison和flex。yacc是一个文法分析器的生成器,bison即是yacc的GNU版本。Lex和YACC是用于构造词法分析机和语法解释器的工具,利用Lex和YACC你可以轻松的构造一个语法解释器。
所以我们要先安装它们,输入命令:sudo apt-get install bison flex
你会看到一个.configure 文件
输入命令: sudo ./configure (如果不能执行,先修改它的权限,输入:chmod 777 .configuer)它会生成Makefile文件
3.然后输入:sudo make
好了,这里出现错误:
util.c: 在函数‘get_commonlog_time’中:
util.c:100:1: 错误: 毗连“t”和“->”不能给出一个有效的预处理标识符
make: *** [util.o] 错误 1
现在我们修改src目录下的 compat.h
找到:
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改成为:
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
再执行 :make,会在src目录下生成一个boa文件,
4.按需求修改主目录下的boa.conf文件,我没有改动,这是默认配置:
User nobody
Group nogroup
ErrorLog /var/log/boa/error_log
AccessLog /var/log/boa/access_log
DocumentRoot /var/www --------这个是web服务器启动/var/www 你的网页目录就是www
UserDir public_html
DirectoryIndex index.html --------服务器启动的时候要有一个主目录的索引文件,也就是默认首页,就是index.html
修改完成后,把它拷到/etc/boa目录下,如果没有这个目录,自己手动创建 : sudo mkdir /etc/boa
5.在src目录下
输入:./boa 出现:
[31/Jan/2013:10:42:55 +0000] log.c:73 - unable to dup2 the error log: Bad file descriptor 这样的错误。
我们要改动log.c文件
注释掉:if(dup2(error_log, STDERR_FILENO) == -1)
{
DIE("unable to dup2 the error log");
}
然后:
make clean
6.然后再在src目录下 执行: ./boa 若出现:Cannot open /var/log/boa/access_log for logging: logfile open: No such file or directory,或者是其他的Cannot open /var/log/boa/error_log for logging: logfile open: No such file or directory
哪个出现,你就在boa.conf里把它给注释掉(不要忘了/etc/boa/目录下的boa.conf),即 改成:
#AccessLog /var/log/boa/access_log
然后再./boa 此时boa服务器就已经启动,打开ubuntu浏览器,输入ubuntu的ip地址,就可以看到你放在/var/www里的网页了。ok