【嵌入式Web服务器】嵌入式Web框架选型
1.业界流行的嵌入式端Web服务器
在嵌入式平台中,内置Web界面通常用于设备配置、监控和控制。以下是一些流行的嵌入式平台Web界面框架:
-
GoAhead WebServer
- 一个小型的嵌入式Web服务器,专为嵌入式Linux系统设计。
-
ESP8266/ESP32 Web框架
- 针对ESP8266和ESP32 WiFi模块的Web框架,如ESP8266Web框架和ESPAsyncWebServer等。
-
MicroWebSrv
- 一个为嵌入式系统设计的轻量级Web服务器,支持C++编写,适用于多种平台。
-
mongoose
- 一个轻量级的网络库,提供了HTTP、WebSocket和MQTT客户端和服务器功能。
-
TASMOTA
- 一个基于ESP8266/ESP32的开源固件,提供了丰富的Web界面,用于智能家居设备。
-
WebThings Gateway
- 一个基于W3C Web of Things标准的开源框架,用于构建连接物理设备和Web应用的网关。
-
Node-RED
- 一个基于流的开发工具,用于连接硬件设备、API和在线服务,支持在嵌入式设备上运行。
-
OpenWrt/LEDE
- 一个基于Linux的开源固件项目,提供了丰富的Web界面和网络功能,常用于路由器。
-
Lighttpd
- 一个非常轻量级的Web服务器,设计用于高吞吐量的网站,同时保持低资源消耗。
-
LwIP
- 一个轻量级的TCP/IP协议栈,支持HTTP服务器功能。
-
FreeRTOS Web server
- 一个为FreeRTOS操作系统设计的Web服务器,用于创建基于Web的接口。
-
Qt for Embedded Linux
- Qt提供了跨平台的C++图形用户界面框架,也可用于嵌入式Linux设备。
-
OpenResty
- 一个基于Nginx的全功能Web平台,集成了大量精心设计的Nginx模块、第三方模块和Lua脚本。
-
IoT.js
- 一个基于JavaScript的轻量级物联网平台,支持Node.js API。
-
WebSharper
- 一个开源的Web开发框架,用于在.NET和Mono上构建Web应用程序,支持F#和C#。
-
Boa
- Boa是一个非常轻量级的 HTTP 服务器软件,最初由 Paul Phillips 为嵌入式系统和简单 web 服务而开发。它以其小尺寸、易于配置和使用而闻名,特别适合资源受限的环境,如小型微控制器或嵌入式设备。
-
Node.js
- 一个基于Chrome V8引擎的JavaScript运行时,适合构建高性能的Web服务器和网络应用。
-
Cherokee
- 一个非常灵活的Web服务器,提供了一个图形界面来管理网站。
1.1 应用范围初筛
适用于MCU平台(基于RTOS&裸机) | 适用于MPU平台(基于Linux) |
---|---|
FreeRTOS Web | Boa |
MircroWebSrv(MicroPython) | MircroWebSrv(Python) |
ESP Web(ESP32&ESP Series) | IoT.js |
Lwip Web | OpenResty |
IoT.js | Node-RED |
Lighttpd | |
WebSharper | |
Qt for Embedded Linux | |
OpenWrt/LEDE | |
mongoose | |
GoAhead WebServer | |
Cherokee |
2.Boa
2.1 Boa 的特点
- 轻量级 :Boa 非常小,通常编译后的二进制文件大小只有几十KB,非常适合资源受限的系统。
- 易于配置 :Boa 的配置文件简单,易于理解和修改,使得它在嵌入式系统中快速部署变得容易。
- 支持基本的 HTTP 功能 :Boa 支持基本的 HTTP 功能,包括 GET 和 POST 请求,以及静态文件的服务器功能。
- 安全性 :虽然 Boa 提供了基本的安全特性,但由于其简单性,它可能不适用于需要高级安全特性的应用。
- 跨平台 :Boa 可以在多种操作系统上运行,包括 Linux、Windows 和其他 Unix 系统。
- 可扩展性 :尽管 Boa 本身功能有限,但它可以通过 CGI 脚本或嵌入式 Perl 脚本进行扩展。
此处记录一下CGI的特性:
CGI(Common Gateway Interface,通用网关接口)脚本是一种运行在Web服务器上的程序,它允许用户通过Web页面与服务器上的程序交互。CGI脚本可以生成动态内容,处理表单数据,与数据库交互,以及执行各种服务器端任务。
CGI脚本的主要特点包括:
- 动态内容生成 :
- CGI脚本可以根据用户的请求动态生成HTML页面,而不是仅提供静态内容。
- 表单处理 :
- 它可以处理用户通过Web表单提交的数据,执行必要的操作,如数据验证、存储到数据库等。
- 语言无关性 :
- CGI脚本可以用任何编程语言编写,只要该语言能够处理输入和输出,常见的有Perl、Python、PHP、Shell脚本等。
- 与数据库交互 :
- CGI脚本可以连接数据库,执行查询和更新操作,常用于网站后端。
- 文件处理 :
- 它可以处理文件上传和下载,管理服务器上的文件。
- 安全性 :
- 由于CGI脚本在服务器上运行,需要特别注意安全性,以防止恶意攻击。
CGI脚本的工作流程通常如下:
- 用户通过Web浏览器向服务器发送请求,请求URL指向一个CGI脚本。
- Web服务器识别请求是针对CGI脚本的,并暂时停止处理请求,将请求传递给CGI脚本。
- CGI脚本执行,处理输入(如表单数据),执行必要的逻辑,生成输出(通常是HTML页面)。
- CGI脚本将输出发送回Web服务器。
- Web服务器将CGI脚本的输出作为HTTP响应发送给用户的Web浏览器。
CGI脚本的缺点:
- 性能开销 :每次请求都需要启动一个新的进程,这可能导致性能问题,特别是在高流量的网站。
- 安全风险 :如果脚本编写不当,可能会成为安全漏洞的来源。
由于这些缺点,许多现代Web应用采用更高效的技术,如FastCGI、mod_php(PHP模块)或各种框架(如Node.js、Django、Ruby on Rails)来处理动态内容。
2.2 Boa的使用场景
- 嵌入式设备 :在智能家居设备、工业控制系统等嵌入式设备中提供 web 界面。
- 小型服务器 :在不需要复杂功能的小型服务器上提供简单的 web 服务。
- 测试和开发 :在开发和测试阶段,Boa 可以作为一个快速搭建的本地服务器。
2.3 Boa的下载,编译和安装
安装 Boa 通常涉及下载源代码,然后使用 make 命令进行编译和安装。配置 Boa 涉及编辑其配置文件,通常是一个名为 boa.conf
的文件,其中可以设置监听端口、文档根目录、CGI 脚本目录等。
2.3.1 下载boa源码
官网网址
http://www.boa.org/
当前最新版本0.94.13
2.3.2 boa源码的编译
将boa-0.94.13.tar.gz解压后,进入src目录下:
tar -xvf boa-0.94.13.tar.gz
cd ./boa-0.94.13/src/
配置我本地环境的交叉编译器
source /opt/environment-setup-cortexa53-crypto-fsl-linux
./configure
执行log:
user@user:~/soft/boa-0.94.13/src$ ./configure
....
checking for fcntl.h... yes
checking for sys/fcntl.h... yes
checking for limits.h... yes
checking for sys/time.h... yes
checking for sys/select.h... yes
checking for getopt.h... yes
checking for working const... yes
checking for uid_t in sys/types.h... (cached) {ac_cv_type_uid_t=yes}
checking for pid_t... yes
checking whether time.h and sys/time.h may both be included... yes
checking whether setvbuf arguments are reversed... configure: error: can not run test program while cross compiling
此处最后一句遇到环境检查报错,表示configure脚本在检测某些函数的行为时无法交叉编译,尝试了以下几种方法,都没有效果
# 指定交叉编译工具
./configure --host=arm-linux-gnueabihf
# 使用--disable-checking
./configure --disable-checking
# 禁用测试
CFLAGS="-DSETVBUF_ARGS_REVERSED=0" ./configure
最后只能将编译setvbuf测试这一段测试程序注释掉,暂时先配置通过
编译源代码
make
遇到以下报错:
修改代码:
打开compat.h文件
再打开boa.c文件,将以下部分注释掉
清理编译环境:
make clean
重新编译
make
又报以下错误
修改log.c
重新编译后,编译成功
user@user:~/soft/boa-0.94.13/src$ file boa
boa: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=20cb5a73822daf5e028add0b20892b31464636b3, for GNU/Linux 3.14.0, with debug_info, not stripped
2.3.3 boa部署到目标平台中
编译出来的可执行程序占用空间大小为:
-rwxrwxr-x 1 user user 320680 Nov 4 14:03 boa
如果想优化空间占用,可以去除调试信息,减小体积:
user@user:~/soft/boa-0.94.13/src$ aarch64-fsl-linux-strip boa
# 优化后占用体积
-rwxrwxr-x 1 user user 85248 Nov 4 14:21 boa
先在pc环境中准备好boa的运行环境后再传送到目标平台上,我想将整个boa运行环境放到目标平台的/opt环境下,需要做以下工作:
1.按下图修改源码defines.h中的SERVER_ROOT,然后重新编译boa可执行程序
2.准备运行环境
新创建一个boa的文件夹,组织运行环境的目录结构如下:
user@user:~/soft/boa-0.94.13/boa$ tree
.
├── boa
├── boa.conf
├── boa_indexer
├── cgi-bin
│ ├── test.c
│ └── test.cgi
├── log
│ ├── access_log
│ └── error_log
├── mime.types
└── www
├── image.PNG
└── index.html
3 directories, 10 files
将src目录下编译出来的boa和boa_indexer交叉编译出来的可执行程序直接拷贝到boa路径下
将配套修改好的boa.conf也拷贝到此路径下,修改后的boa.conf内容如下(与原版差异可以自行比较)
Port 80
User 0
Group 0
ErrorLog /opt/boa/log/error_log
AccessLog /opt/boa/log/access_log
DocumentRoot /opt/boa/www
UserDir public_html
DirectoryIndex index.html
DirectoryMaker /opt/boa/boa_indexer
KeepAliveMax 1000
KeepAliveTimeout 10
MimeTypes /opt/boa/mime.types
DefaultType text/plain
CGIPath /bin:/usr/bin:/usr/local/bin
Alias /doc /usr/doc
ScriptAlias /cgi-bin/ /opt/boa/cgi-bin/
创建cgi-bin,log和www子文件夹
在log目录下创建access_log,error_log两个log文件
在www目录下放入图片资源和index.html,index.html内容如下:
<html>
<body>
<h3>this is a test!</h3><br/>
<img src="image.PNG"/>
<h3>tree picture</h3><br/>
<a href="/cgi-bin/test.cgi">to cgi page</a>
</body>
</html>
在cgi-bin下创建test.c,交叉编译为test.cgi
// test.c文件内容
#include <stdio.h>
int main()
{
printf("Content-type:text/html\n\n"); //这句一定要加上
printf("<html><body>");
printf("<font style=\"color:red; font-size:30px;\">Hello, CGI!</font><br/>");
printf("<a href=\"/index.html\">return index.html</a>");
printf("</body></html>");
return 0;
}
我本地环境下的交叉编译过程
source /opt/environment-setup-cortexa53-crypto-fsl-linux
$CC -o test.cgi test.c
而mime.types是直接从Ubuntu环境下的/etc/mime.types拷贝过来的,demo实测没有影响
3.将组织好的运行环境通过网络拷贝到目标板的/opt目录下
4.到/opt/boa目录下手动运行boa
cd /opt/boa
./boa
到/opt/boa/log路径下查看log:
root@:/opt/boa/log# cat error_log
[28/Apr/2022:23:07:23 +0000] boa: server version Boa/0.94.13
[28/Apr/2022:23:07:23 +0000] boa: server built Nov 4 2024 at 07:44:09.
[28/Apr/2022:23:07:23 +0000] boa: starting server pid=9749, port 80
boa运行成功
5.使用浏览器访问目标板ip地址,查看内置网页成功
打开浏览器,访问我板子的ip地址
http::/172.168.7.12:80
网页成功出现,与预存图片资源一致
6.小结
从上述编译,部署方法可以看出,Boa可以通过编写html的方式来设计web界面
参考资料:
嵌入式http服务器boa 简介_嵌入式boa-CSDN博客
3.OpenWrt/LEDE
OpenWrt主要用于路由器领域,它有一个组件叫LuCI,来提供一个内置的Web,用于配置路由器的功能参数
LEDE 是 OpenWrt 的一个分支,或者说是副产品,该项目主要关注透明性,协作和分权。LEDE 是 OpenWrt 社区的新生,有很多目标是与 OpenWrt 相同的,但是相比于 OpenWrt 也有很大的区别。
3.1 OpenWrt特点
- 开源 :OpenWrt的源代码是开放的,社区驱动,允许用户自由修改和分发。
- 高度可定制 :用户可以根据自己的需要安装和配置软件包,以增加新功能。
- 社区支持 :有着活跃的社区,提供大量的文档、教程和论坛支持。
- 硬件支持广泛 :支持大量的无线路由器和其他网络设备。
- 高级网络功能 :包括IPv6支持、防火墙、QoS、动态DNS、VPN等。
- 安全性 :定期更新以修复安全漏洞,提供比许多商用固件更高的安全性。
3.2 OpenWrt的应用场景
- 自定义路由器固件 :用户可以根据自己的需要定制路由器的功能,比如增强网络安全性、优化性能、添加VPN支持等。
- 网络监控和流量控制 :OpenWrt提供了强大的网络监控工具和流量控制功能,适合需要精细管理网络流量的用户。
- 物联网网关 :作为物联网设备的网关,OpenWrt可以处理来自传感器和智能设备的网络流量,并与其他网络服务交互。
- 无线分布式系统(WDS) :OpenWrt支持无线分布式系统,可以创建一个覆盖广泛区域的无线网络。
- 网络存储和媒体服务器 :利用OpenWrt上的软件包,可以将路由器转变为网络存储或媒体服务器。
3.3 OpenWrt支持的一些路由
主流支持OpenWrt固件的设备可参考:支持刷机(OpenWrt)的路由器大全_支持刷openwrt的路由器列表-CSDN博客
树莓派的3B/4和香橙派R1也支持OpenWrt,有时间可以玩一玩
参考资料:
[OpenWrt Wiki] User guide --- 官方手册
4.MicroWebSrv
MicroWebSrv 是一个由 Python 实现的微型 Web 服务器,专为轻量级应用和快速原型设计打造。它出自jczic之手,强调简洁性与易用性,支持HTTP/1.1协议,提供了基本的Web服务功能,包括静态文件服务、简单的路由机制等,非常适合小型IoT项目或个人开发者的局部测试环境。
在MCU端运行需要MCU环境支持MicroPython,MicroWebSrv 在MicroPython平台上(比如ESP32 Series)支持websocket,html/python,路由功能的微型http服务器。
4.1MicroWebSrv的特点
-
轻量级:
- 非常小的内存和存储空间占用,适合资源受限的环境。
-
跨平台:
- 支持多种操作系统,包括 Windows、Linux 和 macOS。
-
易于集成:
- 可以轻松集成到现有的 C++ 项目中。
-
高性能:
- 利用非阻塞 I/O 和异步处理,提供高性能的 Web 服务。
-
安全性:
- 支持 HTTPS/SSL/TLS,保护数据传输安全。
-
灵活的路由:
- 提供灵活的路由机制,可以轻松定义 RESTful API。
-
模板支持:
- 支持 HTML 模板,方便快速开发动态 Web 页面。
-
文件服务:
- 可以作为静态文件服务器,提供 HTML、CSS、JavaScript 等文件。
-
C++ API:
- 提供 C++ API,允许直接在 C++ 代码中处理 HTTP 请求和响应。
-
日志和调试:
- 内置日志系统,方便调试和监控。
-
单线程/多线程:
- 支持单线程和多线程模式,可以根据需要选择。
4.2 MicroWebSrv应用场景
-
嵌入式设备:
- 在资源受限的嵌入式设备上提供 Web 界面和 API,前提是设备需要支持MicroPython环境。
-
物联网(IoT)网关:
- 作为 IoT 设备的网关,处理设备数据并提供远程访问接口。
-
小型Web应用:
- 开发小型的 Web 应用,如个人博客、小型企业的内部系统。
-
原型开发:
- 快速原型开发和测试,利用其轻量级和易用性。
-
教育和学习:
- 作为教学工具,帮助学生学习 Web 服务器和 Web 开发的基础知识。
-
本地开发服务器:
- 作为开发者的本地开发服务器,提供静态文件服务和 API 测试。
-
远程监控和控制:
- 在工业控制系统中,提供远程监控和控制接口。
-
个人云服务:
- 搭建个人云服务,如私有的文件存储和共享服务。
-
智能家居:
- 在智能家居系统中,提供设备控制和状态监控的 Web 界面。
MicroWebSrv 的轻量级和灵活性使其成为多种场景下的理想选择,特别是在资源受限的环境中。通过其丰富的功能和简单的集成方式,开发者可以快速构建和部署 Web 服务。
4.3 MircoWebSrc开源库简介
仓库地址:https://github.com/jczic/MicroWebSrv.git
Wiki:Home · loboris/MicroPython_ESP32_psRAM_LoBo Wiki · GitHub
源码结构:
"microWebSrv.py" - Web服务器核心
"microWebSocket.py" - 可选的WebSocket支持
"microWebTemplate.py" - 可选的用于渲染.pyhtml页面的模板语言
在网络上检索到的一些信息说MicroWebSrv是基于C++开发的,但是仓库里面却都是Python的源码,粗略看下来MicroWebSrv需要依赖MicroWebSrv模块,需要特别安装这个模块,但不符合需求。后续有需要再研究。
5.Node-RED
Node-RED是一个基于流的开发工具,它让你可以通过连接各种不同的节点来创建自动化任务和应用程序。
Node-RED运行起来,就可以利用一个本地浏览器,通过http://localhost:1880来访问它。如果你能获得Node-RED实例的ip地址或名称,还可以利用其它机器上的浏览器,通过http://{Node-RED-machine-ip-address}:1880对其进行访问。
参考资料:
Node-RED-CN:Node-RED : 文档
Node-RED-Eng: Documentation : Node-RED
树莓派平台:Node-RED : Running on Raspberry Pi
beagleBone Black:Node-RED : Running on BeagleBone Boards
6. Iot.js & Node.js
6.1 Iot.js & Node.js特点
Node.js 和 IoT.js 都是基于 JavaScript 的运行时环境,但它们在设计目标、功能和应用场景上有所不同。
Node.js
- 全功能平台 :
- Node.js 是一个广泛使用的开源、跨平台的 JavaScript 运行时环境,它允许开发者在服务器端运行 JavaScript 代码。
- 事件驱动和非阻塞I/O :
- Node.js 采用事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接和I/O密集型应用。
- NPM(Node Package Manager) :
- Node.js 拥有世界上最大的软件注册表,NPM,提供了大量的开源库和框架,用于各种目的。
- 适用于多种场景 :
- 从Web开发到网络应用,再到命令行工具,Node.js 都可以胜任。
- 性能 :
- Node.js 以其高性能和快速响应而闻名,尤其是在处理I/O密集型任务时。
- 社区和生态系统 :
- Node.js 拥有一个庞大且活跃的开发者社区,不断推动其发展和创新。
Node.js中文网:首页 | Node.js v20 文档
IoT.js
- 为IoT设计的轻量级平台 :
- IoT.js 是一个基于JavaScript的运行时环境,专为物联网(IoT)设备设计,支持在资源受限的环境中运行。
- 轻量级和模块化 :
- IoT.js 被设计为轻量级和模块化,使其适合嵌入式设备和微控制器。
- 兼容性 :
- IoT.js 旨在与Node.js兼容,支持大多数Node.js API和模块。
- 资源效率 :
- 由于IoT设备通常资源有限,IoT.js 优化了内存和存储使用,以适应这些限制。
- 适用于嵌入式系统 :
- IoT.js 提供了对硬件接口的直接访问,使其适合直接与传感器和执行器交互。
- 跨平台 :
- IoT.js 支持多种平台,包括Linux、Windows、macOS以及各种嵌入式平台。
- 社区和生态系统 :
- 虽然不如Node.js那样庞大,但IoT.js 也有一个活跃的社区,致力于其发展。
Node.js是一个全功能的JavaScirpt运行时环境,适合用于更广泛的应用场景,而Iot.js是一个轻量级专为物联网设备设计的运行时环境。如果需要一个高性能、功能丰富的平台,选择Node.js ;如果需要一个轻量级、资源效率高的平台来处理IoT设备
6.2 Node.js的交叉编译与运行效果
6.2.1 直接下载Linux环境下的ARMv8架构的二进制文件
下载 | Node.js 中文网 - node-v20.18.0-linux-arm64.tar.xz
解压后,直接将node.js的二进制程序包移到合适的路径下,并添加PATH环境变量:
sudo mv node-v16.13.1-linux-x64/ /usr/local/nodejs
echo 'export PATH=/usr/local/nodejs/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
验证安装
node -v
npm -v
安装成功
/usr/local# node -v
v20.18.0
6.2.2 下载源码使用交叉编译器进行交叉编译
暂没测试,使用二进制程序包可以在目标平台上运行
6.3.3 node.js在嵌入式Linux平台上运行效果
后续测试~~~
参考资料:
node.js 中文网:Node.js 中文网 — Node.js 简介
下载安装:下载 | Node.js 中文网
交叉编译:Node.js嵌入式开发之(一)交叉编译_nodejs交叉编译-CSDN博客
6.3 Iot.js的交叉编译与运行效果
6.3.1 Iot.js下载与交叉编译
1.下载源码
git clone https://github.com/jerryscript-project/iotjs.git
2.构建ioT.js
source /opt/fsl-auto/38.0/environment-setup-cortexa53-crypto-fsl-linux
tools/build.py
3.构建完成后运行测试安装是否成功
tools/testrunner.py build/x86_64-linux/debug/bin/iotjs
4.启动REPL
build/x86_64-linux/debug/bin/iotjs tools/repl.js
参考资料:
IoT.js 项目教程-CSDN博客
7.lightpd
lighttpd 是一款安全、快速、兼容且非常灵活的网络服务器,针对高性能环境进行了优化。 与其他网络服务器相比,它的内存占用率非常低,并能承受 CPU 负载。 它的高级功能集(FastCGI、CGI、Auth、输出压缩、URL 重写等)使 lighttpd 成为了每一个面临负载问题的服务器的完美网络服务器软件。
7.1 lightpd交叉编译
Lighttpd 是一个开源的轻量级 Web 服务器,它以高性能、低资源消耗和模块化设计而闻名。以下是 Lighttpd 的一些主要特点:
-
轻量级和高性能:
- Lighttpd 设计为轻量级,占用的内存和 CPU 资源很少,特别适合在资源受限的环境中运行,如虚拟主机和嵌入式系统。
-
模块化架构:
- Lighttpd 采用模块化设计,可以根据需要启用或禁用模块,提供了高度的灵活性和可扩展性。
-
高并发处理能力:
- 它能够处理大量的并发连接,而不会显著消耗系统资源,这使得 Lighttpd 在高流量网站中表现良好。
-
支持多种Web技术:
- 支持FastCGI、CGI、SSI、SSL、TLS、IPv6、URL重写、虚拟主机等Web技术。
-
配置简单:
- Lighttpd 的配置文件简洁易懂,使得配置和维护变得简单。
-
安全性:
- 提供了多种安全特性,包括SSL/TLS支持,以及防止常见的Web攻击,如跨站脚本(XSS)和SQL注入。
-
跨平台支持:
- 虽然最初是为Linux设计的,但Lighttpd也支持其他操作系统,包括FreeBSD、OpenBSD、macOS和Windows。
-
日志和监控:
- 提供了详细的日志记录功能,有助于监控和调试Web服务器的状态。
-
反向代理和负载均衡:
- Lighttpd 可以作为反向代理服务器使用,支持负载均衡,适合构建高性能的Web服务器集群。
-
REST API支持:
- 支持RESTful API,方便与其他应用程序集成。
-
WebDAV支持:
- 提供了WebDAV协议支持,允许通过HTTP进行文件管理。
-
插件和扩展:
- 拥有一个活跃的社区,提供了许多插件和扩展,以支持更多的功能。
-
兼容性:
- 与Apache的配置文件有一定的兼容性,使得从Apache迁移到Lighttpd变得更加容易。
Lighttpd 的这些特点使其成为许多Web应用和网站的理想选择,尤其是那些需要高性能和高并发处理能力的应用。
7.2 lightpd应用场景
- 嵌入式设备HTTP服务器:Lightpd可以用于在嵌入式设备上实现HTTP服务器,例如通过手机APP连接到设备的WiFi热点,进行设备的参数配置。这种应用场景下,设备端需要作为一个HTTP服务器,而不需要支持CGI,通过APP展示界面即可。
- 支持多种编程语言的Web应用程序:Lightpd支持FastCGI、SCGI和CGI对外部程序的接口,允许用任何编程语言编写的Web应用程序与服务器一起使用。特别是对于PHP的性能,Lightpd的FastCGI可以配置为正确而高效地支持带有操作码缓存(如APC)的PHP。
- Web框架:Lightpd是一个流行的Web服务器,用于Catalyst和Ruby on Rails Web框架。它在Python、Perl、Ruby和Lua社区中的受欢迎程度也引起了关注。
- 数据库驱动的网站:Lightpd支持WebDNA,这是一种有弹性的内存数据库系统,用于构建数据库驱动的网站。
这些应用场景展示了Lightpd的灵活性和多功能性,使其成为多种Web服务和应用的理想选择。
7.3 lightpd交叉编译
1.源代码下载
2.交叉编译
在树莓派上编译 Lighttpd 需要几个步骤,包括安装依赖、获取 Lighttpd 源代码、配置编译选项以及编译和安装。以下是详细的步骤:
步骤 1: 更新系统包
首先,确保你的树莓派系统是最新的。打开终端并运行以下命令:
sudo apt-get update
sudo apt-get upgrade
步骤 2: 安装依赖
Lighttpd 编译需要一些依赖库,如 libpcre3-dev
、zlib1g-dev
和 libssl-dev
。安装这些依赖:
sudo apt-get install build-essential libpcre3-dev zlib1g-dev libssl-dev
步骤 3: 获取 Lighttpd 源代码
从 Lighttpd 的官方网站或其在 GitHub 上的仓库下载最新版本的源代码。你可以使用 wget
或 git
来获取源代码:
wget https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.63.tar.gz
tar -zxvf lighttpd-1.4.63.tar.gz
cd lighttpd-1.4.63
或者使用 git
:
git clone https://github.com/lighttpd/lighttpd1.4.git
cd lighttpd1.4
git checkout tags/lighttpd-1.4.63 # 替换为最新的标签
步骤 4: 配置编译选项
在 Lighttpd 的源代码目录中,运行 ./configure
脚本并指定编译选项。例如:
./configure --prefix=/usr/local/lighttpd \
--with-openssl \
--with-zlib \
--with-pcre \
--enable-static \
--disable-shared \
--with-mod-indexfile
这里的参数 --prefix
指定了安装前缀,--with-openssl
、--with-zlib
和 --with-pcre
指定了启用的模块。
步骤 5: 编译 Lighttpd
使用 make
命令来编译 Lighttpd:
make
步骤 6: 安装 Lighttpd
使用 make install
命令将编译好的 Lighttpd 安装到系统中:
sudo make install
步骤 7: 配置 Lighttpd
创建或编辑 Lighttpd 的配置文件。通常,配置文件位于 /usr/local/lighttpd/etc/lighttpd.conf
。你可以从源代码目录中的 doc/config
文件夹中复制示例配置文件:
sudo mkdir /usr/local/lighttpd/etc
sudo cp doc/config/lighttpd.conf /usr/local/lighttpd/etc/
sudo cp -r doc/config/conf.d/ /etc/lighttpd/
sudo cp doc/config/modules.conf /etc/lighttpd/
编辑配置文件以适应你的需求:
sudo nano /usr/local/lighttpd/etc/lighttpd.conf
步骤 8: 启动 Lighttpd
启动 Lighttpd 服务:
sudo /usr/local/lighttpd/sbin/lighttpd -f /usr/local/lighttpd/etc/lighttpd.conf
步骤 9: 测试 Lighttpd
在浏览器中访问树莓派的 IP 地址,查看是否能够看到 Lighttpd 的欢迎页面。
注意事项
- 确保你已经安装了所有必要的依赖库。
- 根据你的具体需求,可能需要启用或禁用某些模块。
- 如果遇到编译错误,请检查配置选项和依赖库是否正确安装。
通过以上步骤,你可以在树莓派上成功编译和安装 Lighttpd,并开始使用它来托管 Web 应用程序。
参考资料:
【章节 一】嵌入式Web Server Lighttpd安装、配置、开发详细流程_嵌入式webserver-CSDN博客