Embedded Appweb 移植 安装 应用
(一)appweb 的简单功能介绍
网方网站:http://www.appwebserver.org/
主要功能特性(本文介绍下面彩色选项的简单应用)
Full HTTP/1.1 web server
Multi-threaded, event-driven core: fastest performance in its class
Dynamically loadable modules
Server-side JavaScript web framework
In-memory PHP module
In-process CGI as well as traditional CGI
Apache compatible configuration and logging
Basic and Digest Authentication
Secure Socket Layer (SSL/TLS)
Session state data management
HTTP Client program and library
ROMable web pages and configuration files
Cross-platform and portable
Embeddable in applications and devices (supports XIP)
Modular source code and documentation provided
(二)在 Linux OS 下 PC 上的安装。
下载 http://www.appwebserver.org/products/appweb/doc.html
appweb-src-2.4.2.tar.gz 源码包。解压,默认配置安装。
./confiugure;
make;
make install
默认配置安装是支持 CGI 和 Authentication 功能模块的。默认安装路径为
/usr/local/ 配 置 文 件 所 在 路 径 为 /etc/appweb/ , appweb 默 认 主 页 路 径
/var/www/app-default
启动服务:/etc/init.d/appweb start
测试: 127.0.0.1:7777/ 或者 127.0.0.1:4443/ 出现缺省页面说明安装成功。(IP 也可
为机子实际 IP)
停止服务:/etc/init.d/appweb stop
(三)CGI 应用介绍
Common gateway interface(CGI) 通用网关接口,一般用角本语言来写。Appweb 是
在配置文件中(缺省的是 appweb.conf 文件。也可以根据你的需要来定一个自己的配置文件)
通过 ScriptAlias 指令来指定一个 CGI 目录。如:
ScriptAlias /cgi-bin/ $SERVER_ROOT/web/cgi-bin/
Note:web 为你放网页文件的根目录。假如在/cgi-bin 下有一个 CGI 文件名为 myCgi
你可以在浏览器中这样访问它
http://wwww.yourserver.com/cgi-bin/myCgi
(wwww.yourserver.com 是你访问的这里只是一个样子 )
下面是 CGI 配置文件中的信息说明。CGI 的配置常是这样
#加载 CGI 处理模块
LoadModule cgi libcgiModule
#添加处理支持的角本扩展名
AddHandler cgiHandler .cgi .cgi-nph .bat .cmd .pl .py .sh
#CGI 文件所在目录
ScriptAlias /cgi-bin/ "$DOCUMENT_ROOT/cgi-bin"
#在扩展名与 mime type 这间形成一种对照映射关系
Action application/x-appweb-perl
Action application/x-appweb-python
Action application/x-appweb-sh
/bin/sh
/usr/bin/perl
/usr/bin/python
在 Appweb 中 CGI 应用和书写的注意点
角本要遵守一定规则,不然 Appweb 的 CGI 解析器没法正确解析。
Bash perl 的一个小样例
#!/bin/bash
echo "Content-Type: text/html"
echo "Status: 200"
echo ""
echo "
Sample CGI Output
CGI Appweb test
"
exit 0
Perl 的样例
#!/usr/bin/perl
#指定 server 与 broser 之间的 protocol,输出数据类型为 text/html,也就是 html
文件。
print "Content-type:text/html\n\n";
print "";
print "";
print "
this is a test";
print "";
print "
OK ---appWeb CGI !";
print "";
#exit the program;
Exit;
保证角本的可执行性,和其它的用户的可访问性。(可访问性对所有的 web 文件都应该
满足,不然当你在浏览器中访问时会出现你想不到的错误,还不知道是为什么。尤其在开
发板上应该注意这点),你可以先在 command line 上调试你的 CGI 脚本程序以保证它的正
确性和可执行性。
(四)Basic and Digest Authentication 应用介绍
Appweb 支持 basict 和 digest 两种类型的认证方式。
1) basic authentication
它使用纯文本文件传输用户名和密码,耗资源小。但极不安全,如果你的客户端支持
digest 认证,建议使用 digest 类型。
在配置文件中常常是这样:
# 你要认证保护的目录
# 认证类型 AuthType digest(AuthType basic) 选一个即可
AuthType basic
# 认证代号名,随便你取,在 httpPassword 时会用到
AuthName "TestAuth"
# 储放用户名和密码的文件,可以是决对路径和相对路径
AuthUserFile users.db
# 用户以什么方式生效,具体见官方文档说明
Require valid-user
2) Digest Authentication
它是一种较为理想的,取代 basic 类型的认证方式。它对用户和密码在传输中进行了一
些安全的处理。它的配置与 basic 唯一不同的是 AuthType 不一样。
(五)httpPassword 的使用。
httpPassword 用于在密码文件(users.db 上面配置文件中提到的)中创建用户名
密码,Digest 和 basic 授权认证都使用一个相同的授权文件,文件格式为:
Enable/Disable: UserName: Realm: Password
字段说明
Enable/Disable: 字段值为 0 或 1
UserName:用户名
Realm:你要授权认证的作用域名,就是上面配置文件 AuthName 的名称。
Password: 用户密码,是用 MD5 加过密的。
下面是一个例子:
1:ZhangSan: TestAuth: 3cc654d84f2b4361fe45a0c92e3f0e0b
1)httpPassword 的命令行语法为:
httpPassword [-c] [-p passWord] userFile realm username
创建密码文件
选项:
-c
-p passWord 使用一个具体的密码
-e
-d
生效(缺省情况在密码文件 Enable/Disable 值为 1)
无效 (Enable/Disable 值为 0)
userFile 为上在配置文件中定义的密码配置文件;
Realm 就是配置文件中 authName 定义的名字;
username 为用户名
-c 选项表示如果密码文件不存在就创建它,如果在就新建它,所以第一次用该命令时如果
用户密码文件不存在就要使用它,如果已经存在就要小心使用了。
-p 表示把用户密码一起输入。如 -p 123 就表示用户的密码为 123
如果没有-p 选项当你执行些命令时就会提示你输入用户名密码。
2)使用举例:
httpPassword –p 123 /home/users.db authTest userA
就是用时创建的用户 userA 密码为 123
上面的命令等同
/home/users.db authTest userA
$httpPassword
$输入用户密码:123
$确认密码:123
(六)将 appweb2.4.2 移植到 s3c2440 上
一般编译
1) 写脚本指定交叉编译器 compileArm.sh
#!/bin/bash
export CC="/usr/local/arm/3.4.1/bin/arm-linux-gcc"
export AR="/usr/local/arm/3.4.1/bin/arm-linux-ar"
export LD="/usr/local/arm/3.4.1/bin/arm-linux-ld"
export RANLIB="/usr/local/arm/3.4.1/bin/arm-linux-ranlib"
export STRIP="/usr/local/arm/3.4.1/bin/arm-linux-strip"
export CC_FOR_BUILD="gcc"
echo "@have done!"
执行上面的脚本。
为你 PC 上的 gcc
2) 进入源码包目录
./configure
--host=arm-s3c2440-linux
--build=i686-pc-linux
--enable-multi-thread --disable-shared --disable-shared-libc --enable-static
--disable-ejs
--disable-test
--disable-access-log --disable-modules --with-cgi=builtin --with-auth=builtin
--with-ssl=builtin
--disable-samples
--disable-log
Make ;
3) 在 appweb 目录下有需要的配置文件和 web 目录下的缺省页面文件
在主目录 bin 下 arm-s3c2440-linux 下会生成一些可执行文件如 appweb,httpPassword
groups.db
server.crt
server.key.pem
等。
将 appweb 目 录 下 appweb.conf
mime.types
和 arm-s3c2440-linux 下的 appweb httpPassword(为了减小大小最好把你的可执行程序在
PC 在用 arm-linux-strip 处理一下 即:arm-linux-strip appweb)下载到目标板上,这里假
设下载到/home/appweb 下。将你的页面文件放在你指令的目录,如/var/www/web/
修改 appweb.conf 配置文件。比如你的页面文件路径要改成你上面指定的路径
在/home/appweb 下执行如:
运行 ./appweb –f appweb.conf 启动服务
保持你的板子和 PC 机网络畅通,可以先用 ping 测试。
在 PC 机的浏览器中输入
http://板子 IP:7777/
就可以看到缺省的主页文件了
关于 appweb 更具体的应用请见官方应用文档。
http://板子 IP:4443/
server.key
users.db
or
(七)关于一些错误的提示
如果在应用中出现问题可以从以下几方面去考虑
1 是否有对该文件或目录的访问权限
2 配置文件是否正确
3 是否有运行的条件,比如一些必要的库
4 如果是 CGI 还要保证它的可执行性和书写的正确性。
一些常见的错误
Can not get the file list (可能就是没有访问权限)
Can not run CGI process(可访问性,执行性,语法正确性是否满足)