http://blog.csdn.net/keyearth/article/details/5819617
学习嵌入式Linux的过程中,一直想自己建立一个网络服务器,运行在S3C2410的板子上,作为一个简人机交互界面,也是工业现场中比较常用的嵌入式应用之一。
选来选去,还是Boa比较好,因为这个Linux下的webserver非常简单,设计者考虑的首要因素是速度和安全,选择了单任务单用户的模式,对简单的要求安全性的工业应用来说应该是比较合适的。
而且据Boa.org网站的数据, 速度比Apache还快一点点。所以下载下来安装包,到网上搜了一些配置方法,结合自己的实践,终于成功的在自己的虚拟机Ubuntu10.0系统上配置成功,在Firefox浏览器中能够访问服务器。
最快速的配置步骤如下所示,如果要改配置可以参考附录中的说明更改。自己做个总结,也希望对他人有些参考价值。
1 . 在www.boa.org 上下载boa ,当前的版本为0.94.13 ,放在某目录
2 . 解压boa : $ tar -zxvf boa-0.94.13.tar.gz
3 . 进入源码目录: $ cd boa-0.94.13/src
4 . 执行配置脚本: $ ./configure
检查所需要的工具是否存在,yes 表示存在,no 表示不存在。不存在的不一定都要安装。执行make 时出错会提示缺少什么命令……
在Ubuntu 系统中,可能会提示找不到yacc 和lex 命令,如果执行下面这句:
sudo apt-get install yacc lex
会发现失灵了! 其实正确的方法是
sudo apt-get install flex bison
因为在Ubuntu 系统中用flex 和 bison 代替了lex 和 yacc 。
5 . 修改compat.h 的第120 行,否则会编译出错
修改:#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
改为:#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff
修改log.c 的第73 行,否则可能会dup2 出错。
注释掉这段:
/* if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
} */
6 . 其他默认
7 . 编译: $ make
生成boa 和 boa_indexer
8 . 瘦身(针对嵌入式系统): $ strip boa $ strip boa_indexer
9 . 拷贝boa 、boa_indexer 、defines.h 到 /etc/boa 目录下。
$ sudo mkdir /etc/boa
$ sudo cp boa boa_indexer defines.h /etc/boa
此目录为boa 服务器的运行起始目录,在defines.h 中由SERVER_BOOT 定义。
10 . 回到上级目录,修改boa.conf 配置文件。
$ cd ../
$ vim boa.conf
修改:ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
改为:ScriptAlias /cgi-bin/ /var/www/cgi-bin/
修改:DirectoryMaker /usr/lib/boa_indexer
改为:DirectoryMaker /etc/boa/boa_indexer
保存,拷贝boa.conf 到/etc/boa/ 目录下。
11 . 建立需要的文件夹
$ mkdir /var/www /var/www/cgi-bin /var/log/boa
12. 运行boa 服务器
$ /etc/boa/boa
13. 验证服务器是否成功运行
(1 ) 打开浏览器,任意保存一个网页为html 格式,如baidu.html
(2 ) 拷贝baidu.html 文件到/var/www 目录下。
(3 ) 在浏览器地址栏输入 http://localhost/baidu.html 就可以看到了!
附录: Boa Webserver 配置参数说明:
Port : boa 服务器监听的端口,默认的端口是 80 。如果端口小于 1024 ,则必须是 root 用户启动服务器。
Listen :绑定的 ip 地址。不使用这个参数时,将绑定所有的地址。
User :连接到服务器的客户端的身份,可以是用户名或 UID 。
Group :连接到服务器的客户端的组,可以是组名或 GID 。
ServerAdmin :服务器出故障时要通知的邮箱地址。
ErrorLog :指定错误日志文件。如果路径没有以“ / ”开始,则相对于 ServerRoot 路径。没有配置时默认的文件是 /dev/stderr 。若不想记录日志,指定文件为 /dev/null 。
AccessLog :设置存取日志文件,与 ErrorLog 类似。
UseLocaltime :设置使用本地时间,使用 UTC 时注释这个参数。这个参数没有值。
VerboseCGILogs :在错误日志文件中记录 CGI 启动和停止时间,若不记录,注释这个参数。这个参数没有值。
ServerName :指定服务器的名称,当客户端使用 gethostname + gethostbyname 时返回给客户端。
VirtualHost :虚拟主机开关。使用此参数,则会在 DocumentRoot 设定的目录添加一个 ip 地址作为新的 DocumentRoot 来处理客户端的请求。如 DocumentRoot 设置为 /var/www ,则 http://localhost/ 则转换成 /var/www/127.0.0.1/ ,若注释此参数,则为 /var/www/ 。
DocumentRoot : HTML 文件的根目录(也就是网站的目录)。
UserDir :指定用户目录。
DirectoryIndex :指定预生成目录信息的文件,注释此变量将使用 DirectoryMaker 变量。这个变量也就是设置默认主页的文件名。
DirectoryMaker :指定用于生成目录的程序,注释此变量将不允许列目录。
DirectoryCache :当 DirectoryIndex 文件不存在,而 DirecotryMaker 又被注释掉时,将列出这个参数指定目录给客户端。
KeepAliveMax :每个连接允许的请求数量。如果将此值设为 " 0 " ,将不限制请求的数目。
KeepAliveTimeOut :在关闭持久连接前等待下一个请求的秒数。(秒)。
MimeTypes :设置包含 mimetypes 信息的文件,一般是 /etc/mime.types 。
DefaultType :默认的 mimetype 类型,一般是 text/html 。
CGIPath :相当于给 CGI 程序使用的 $PATH 变量。
SinglePostLimit :一次 POST 允许最大的字节数,默认是 1MB.
AddType : 增加 MimeType 没有指定的类型,例 : AddType type extension [extension ...] 。要使用 cgi ,必须添加 cgi 类型: AddType application/x-httpd-cgi cgi
Redirect :重定向文件
Aliases :指定路径的别名。
ScriptAlias :指定脚本路径的虚拟路径。