把 web 服务器移植于嵌入式系统的服务器,便是嵌入式 web 服务器。它依旧基于 http 文本协议来通信,有着标准的接口形式,对客户端而言,访问嵌入式 web 服务器跟访问普通的 web 服务并无二致。

在实际工作当中,我们存在于板子之上搭建 web 服务器的情况,这给我们的调试带去了些许便利,能够借由网页跟板子开展交互,即便板子处于没有显示屏的状况下,也可当作一种方案用以进行功能展示。
一、核心约束
嵌入式环境与服务器环境不同,嵌入式设备有三个硬性约束:
受到限制的维度,具有代表性的指标,内存范围是8MB至128MB,CPU的范围是100MHz至1GHz,存储的范围是4MB至32MB的Flash。
“功能全面 + 可扩展性”,这是传统服务器所秉持的设计哲学,而嵌入式服务器所追求的则是“够用 + 极致精简”,是这样的情况。
二、常见嵌入式 Web 服务器2.1 NGINX
NGINX是服务器端王者,嵌入式场景能用吗?
有不少人觉得,NGINX仅仅是适配服务器用的,不过,事实上,在高性能的嵌入式设备里,像智能网关、边缘计算盒子这类,它有着出色的表现,而且,它还适用于类似Cortex – A53/A72的中高端嵌入式设备。
http://nginx.org/download/nginx-1.24.0.tar.gz
就NGINX而言,它依赖于pthread、zlib等这类库,要是嵌入式系统并没有预先安装,那就需要手动去进行移植。
Nginx 通过采用“master 进程 + worker 进程 + 事件驱动”这种模型,其并发能力相较于 Boa 而言要远远地更为强大,不过在资源开销方面同样也会更大一些。

嵌入式裁剪编译:
裁剪版:~350KB

内存占用优化配置:

2.2 Boa
Boa是那种单进程具备高性能特征的“资深者”,它是属于老牌的单线程异步Web服务器,过去曾是嵌入式领域的“标准配置”,其核心优势在于无比小巧(编译之后仅仅只有几十KB),然而早就已经停止进行维护了(最后的版本停留在2005年)。
http://www.boa.org/
Boa运用“单进程 + 非阻塞I/O + 事件驱动”模式,将其喻为“一个服务员同时招待多个顾客,仅处理有需求的顾客,并非一直等候”,然而因属单线程,在高并发状况下会出现响应延迟。

使用boa需要配置boa.conf文件,最简配置如:
echo "Port 80
User 0
Group 0
DocumentRoot /var/www
ServerName EmbeddedBoa
CGIPath /bin:/usr/bin:/sbin:/usr/sbin" > boa.conf
设计一个简单的网页如:

嵌入式设备上启动boa服务:

boa进程启动成功之后,于浏览器里输入我们开发板的IP地址,便能够访问到index.html网页。

boa适用场景:
不适用的场景:
2.3 Thttpd
Thttpd,它属于那种单进程多线程(其线程部分为可选)的轻量级服务器,它的核心优势在于,静态页面处理速度特别快,而且资源占用很低(编译之后大概是~100KB),它还支持虚拟主机以及URL重写,当前仍有少量的社区在对其予以维护。
https://www.oschina.net/p/thttpd?hmsr=aladdin1e1
独到之处:
局限:
对动态 CGI 支持较弱,不支持 HTTPS。
2.4 Mini_httpd
Mini_httpd,它属于超轻量级服务器,编译之后仅仅只有~50KB,它支持CGI,它支持SSI,它支持HTTPS,且是集成OpenSSL的那种,它代码量少,仅仅只有几千行,它易于修改,它易于移植,它适合资源极度受限下的场景。
这是一个网址链接 https://www.oschina.net/p/mini-httpd。
# 典型配置
./mini_httpd -p 8080 -d /www -c "**.cgi" -u root
对比 Thttpd:
特性,Thttpd,二进制大小约为 120KB,Mini_httpd,其二进制大小约为 80KB,内存占用方面,Thttpd,其内存占用约为 800KB,Mini_httpd,其内存占用约为 600KB,HTTPS 支持情况,Thttpd,支持,Mini_httpd,也支持。
2.5 Lighttpd
Lighttpd,也就是被称作“小灯”的那个,它是基于事件驱动的轻量级服务器,其核心优势乃是功能全面加上资源适中,编译之后大概是200KB,它支持CGI,支持FastCGI,支持HTTPS,支持gzip压缩,同时社区活跃度还很高。
http://www.lighttpd.net/
主要特性:
Lighttpd跟Nginx它们的设计哲学类似,是那种事件驱动、高性能以及低消耗这样的,所以常常被拿来作比较,Lighttpd好似一个专注的“特种兵”,在它所擅长的那些领域,也就是高并发连接、低资源消耗方面极其出色,而Nginx则更像是一个功能全面的“多面手”,适用性要更广一些。

适用场景:
像网络摄像头的管理界面这类,需要 PHP 支持的复杂 Web 应用,以及需要 Python 支持的复杂 Web 应用。
配置示例:

2.6 Appweb
Appweb,一款专门针对嵌入式所设计的工业级服务器,它能够支持 HTTP/2,也能支持 HTTPS,还支持 WebSocket 以及 RESTful API,其核心优势在于具备高稳定性,同时又有着很强的适配性,不过部分功能是需要商业授权的,开源版对于嵌入式基础使用而言是足够的。
核心优势:
ESP 示例(动态生成设备状态页面):

适用场景:
三、对比3.1 资源占用对比

3.2 功能特性对比

3.3 决策树

未经允许不得转载:openwrt技术分享 » 嵌入式Web服务器搭建指南及常见类型(含NGINX)与应用场景

openwrt技术分享
微信关注,获取更多