goahead-5.2.0(嵌入式Web服务器)静态库移植

文章详细介绍了如何配置和移植Goahead-5.2.0嵌入式Web服务器的静态库,包括交叉编译环境设置、编译命令、rount.txt和auth.txt文件的配置,涉及身份验证方法(如form、basic、digest)以及路由、HTTP方法和URI的概念。同时,提到了可能出现的问题及解决措施,如IP设置和文档目录的检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

goahead-5.2.0(嵌入式Web服务器)静态库移植

一、编译环境配置
嵌入式交叉编译环境的配置主要注意下面几个参数的配置

## The cross complier
CROSS = 工具链(例如arm-himix200-linux-)
# The C program compiler. Uncomment it to specify yours explicitly.
CC = $(CROSS)gcc
STRIP=$(CROSS)strip
# The C++ program compiler. Uncomment it to specify yours explicitly.
CXX = $(CROSS)g++
# The GNU ar program creates, modifies, and extracts from archives.
AR = $(CROSS)ar

project 文件夹有很多.mk demo文件,如goahead-linux-default.mk 可选取相应的文件做模版。

二、编译库
编译命令: make -f ./project/你的定制mk
如: make -f ./project/goahead-linux-arm_static.mk
将编译生成的.a 文件,头文件,以及直接拷到移植目标使用。

三、rount.txt文件的配置

1、auth
auth=xxx 该语句指定了该请求需要用那种方式验证身份。
auth=form 表单式身份验证,参考设置:

#       route uri=/pub/
#       route uri=/action/login methods=POST handler=action redirect=200@/ redirect=401@/pub/login.html
#       route uri=/action/logout methods=POST handler=action redirect=200@/pub/login.html
#       route uri=/ auth=form handler=continue redirect=401@/pub/login.html

第一行是指定未进行登陆验证之前可访问的目录,登陆界面相关的css和js文件都需要在该目录下。

第二行指明登录操作的重定向,验证成功返回状态为200时将界面重定向到index.asp,验证失败时,继续在login.asp界面。

第三行是退出登录的重定向。

第四行定义与所有其他 URI 匹配的route,并规定基于表单的身份验证。continue 处理程序对用户进行身份验证,如果用户成功通过身份验证,则继续处理,让其他处理程序为请求提供服务并生成响应。如果身份验证失败,用户将被重定向回登录页面。

auth=basic 基本身份验证,参考设置:

#       route uri=/auth/basic/ auth=basic abilities=manage

basic /digest 效果样式
在这里插入图片描述

auth=digest 摘要式身份验证。该方法是在基本身份验证的基础上,对密码进行MD5加密;

  route uri=/auth/digest/ auth=digest abilities=manage

注意:abilities 的配置一定要和auth.txt 设置密码时选择的角色的abilities 移植,否则会有权限不够的错误问题。

2、handlers
常见配置如下,通过上述语句指定每种请求对应的handle。

route uri=/action handler=action
route uri=/ methods=OPTIONS|TRACE handler=options
route uri=/	extensions=asp,css,js handler=jst

在这里插入图片描述

3、methods
标准的http方法有 : DELETE, GET, OPTIONS, POST, PUT,HEAD and TRACE,常用的就是GET与POST。
在这里插入图片描述

4、uri
URI、URL、URN概念:
URI = Uniform Resource Identifier 统一资源标志符
URL = Uniform Resource Locator 统一资源定位符
URN = Uniform Resource Name 统一资源名称
简单来说,就是URI是抽象的定义,不管用什么方法表示,只要能定位一个资源,就叫URI。可以使用两种方法定位:1,URL,用地址定位;2,URN 用名称定位。所以URL是URI的子集。

5、extensions

route uri=/ extensions=jst,asp handler=jst

注意:
在route.txt文件里的route uri=/cgi-bin dir=根路径 handler=cgi 设置根路径,最终的路径为:根路径/cgi-bin,如设置根路径为/mnt/nfs/goheah12/,则cgi文件存放的路径为/mnt/nfs/goheah12/cgi-bin。

四、auth.txt文件的配置**
auth.txt的文件格式:

#   Schema
role name=manage   abilities=manage
user name=admin  password=344c4110ad757e29261719ec1fb48b4b  roles=manage

1、配置文件需要以空行结尾
通过代码websLoad(“auth.txt”) 加载的配置文件,最后一行一定要是一个空行,不然就会有问题。

2、密码的加密方式为 username:ME_GOAHEAD_REALM:password 这个字符串的MD5码。其中 ME_GOAHEAD_REALM 的定义如下:

#ifndef ME_GOAHEAD_REALM
    #define ME_GOAHEAD_REALM    "example.com"
#endif

4、密码的生成
借助一个工具gopass(编译库的时候已经同步生成),用于生成登录密码的密文,命令格式:

gopass  [--cipher blowfish|md5] [--file filename] [--password password] realm username roles...

示例: ./gopass --cipher md5 --password 123456 example.com admin manage
–cipher md5:加密采用md5
–password 123456:auth.txt中password字段的明码
example.com:加密中的salt,定义在me.h中,即上面讲到第二点提到的内容
admin :auth.txt的name字段
manage:roles字段

五、可能出现的其他问题

问题1:
goahead: 0: Cannot get host address for host (none): errno 2
goahead: 0: Cannot initialize server. Exiting.

原因分析:
没有设置好IP,需要goahead设置IP

解决措施:
在http.c的setLocalHost函数里,将这块代码

struct hostent  *hp;
    if ((hp = gethostbyname(host)) == NULL) {
        error("Cannot get host address for host %s: errno %d", host, errno);
        return -1;
    }
    memcpy((char*) &intaddr, (char *) hp->h_addr_list[0], (size_t) hp->h_length);
    ipaddr = inet_ntoa(intaddr);

屏蔽掉,并添加 ipaddr=“0.0.0.0”;
注:0.0.0.0 代表本机的所有ip地址

2、查不到网页

#ifndef ME_GOAHEAD_DOCUMENTS
    #define ME_GOAHEAD_DOCUMENTS "web"
#endif

这个宏定义了网页所在的目录,检查测试文件夹和设置的是否一致

3、问题三:
goahead: 0: Unable to read key self.key
goahead: 0: Cannot initialize server. Exiting.
解决办法:
  在goahead库编译生成文件目录中找到self.key和self.crt文件拷贝到执行文件目录下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值