【嵌入式Web服务器】嵌入式Web框架选型

1.业界流行的嵌入式端Web服务器

在嵌入式平台中,内置Web界面通常用于设备配置、监控和控制。以下是一些流行的嵌入式平台Web界面框架:

  1. GoAhead WebServer

    • 一个小型的嵌入式Web服务器,专为嵌入式Linux系统设计。
  2. ESP8266/ESP32 Web框架

    • 针对ESP8266和ESP32 WiFi模块的Web框架,如ESP8266Web框架和ESPAsyncWebServer等。
  3. MicroWebSrv

    • 一个为嵌入式系统设计的轻量级Web服务器,支持C++编写,适用于多种平台。
  4. mongoose

    • 一个轻量级的网络库,提供了HTTP、WebSocket和MQTT客户端和服务器功能。
  5. TASMOTA

    • 一个基于ESP8266/ESP32的开源固件,提供了丰富的Web界面,用于智能家居设备。
  6. WebThings Gateway

    • 一个基于W3C Web of Things标准的开源框架,用于构建连接物理设备和Web应用的网关。
  7. Node-RED

    • 一个基于流的开发工具,用于连接硬件设备、API和在线服务,支持在嵌入式设备上运行。
  8. OpenWrt/LEDE

    • 一个基于Linux的开源固件项目,提供了丰富的Web界面和网络功能,常用于路由器。
  9. Lighttpd

    • 一个非常轻量级的Web服务器,设计用于高吞吐量的网站,同时保持低资源消耗。
  10. LwIP

    • 一个轻量级的TCP/IP协议栈,支持HTTP服务器功能。
  11. FreeRTOS Web server

    • 一个为FreeRTOS操作系统设计的Web服务器,用于创建基于Web的接口。
  12. Qt for Embedded Linux

    • Qt提供了跨平台的C++图形用户界面框架,也可用于嵌入式Linux设备。
  13. OpenResty

    • 一个基于Nginx的全功能Web平台,集成了大量精心设计的Nginx模块、第三方模块和Lua脚本。
  14. IoT.js

    • 一个基于JavaScript的轻量级物联网平台,支持Node.js API。
  15. WebSharper

    • 一个开源的Web开发框架,用于在.NET和Mono上构建Web应用程序,支持F#和C#。
  16. Boa

    • Boa是一个非常轻量级的 HTTP 服务器软件,最初由 Paul Phillips 为嵌入式系统和简单 web 服务而开发。它以其小尺寸、易于配置和使用而闻名,特别适合资源受限的环境,如小型微控制器或嵌入式设备。
  17. Node.js

    • 一个基于Chrome V8引擎的JavaScript运行时,适合构建高性能的Web服务器和网络应用。
  18. 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 的特点

  1. 轻量级 :Boa 非常小,通常编译后的二进制文件大小只有几十KB,非常适合资源受限的系统。
  2. 易于配置 :Boa 的配置文件简单,易于理解和修改,使得它在嵌入式系统中快速部署变得容易。
  3. 支持基本的 HTTP 功能 :Boa 支持基本的 HTTP 功能,包括 GET 和 POST 请求,以及静态文件的服务器功能。
  4. 安全性 :虽然 Boa 提供了基本的安全特性,但由于其简单性,它可能不适用于需要高级安全特性的应用。
  5. 跨平台 :Boa 可以在多种操作系统上运行,包括 Linux、Windows 和其他 Unix 系统。
  6. 可扩展性 :尽管 Boa 本身功能有限,但它可以通过 CGI 脚本或嵌入式 Perl 脚本进行扩展。

此处记录一下CGI的特性:

CGI(Common Gateway Interface,通用网关接口)脚本是一种运行在Web服务器上的程序,它允许用户通过Web页面与服务器上的程序交互。CGI脚本可以生成动态内容,处理表单数据,与数据库交互,以及执行各种服务器端任务。

CGI脚本的主要特点包括:

  1. 动态内容生成
  • CGI脚本可以根据用户的请求动态生成HTML页面,而不是仅提供静态内容。
  1. 表单处理
  • 它可以处理用户通过Web表单提交的数据,执行必要的操作,如数据验证、存储到数据库等。
  1. 语言无关性
  • CGI脚本可以用任何编程语言编写,只要该语言能够处理输入和输出,常见的有Perl、Python、PHP、Shell脚本等。
  1. 与数据库交互
  • CGI脚本可以连接数据库,执行查询和更新操作,常用于网站后端。
  1. 文件处理
  • 它可以处理文件上传和下载,管理服务器上的文件。
  1. 安全性
  • 由于CGI脚本在服务器上运行,需要特别注意安全性,以防止恶意攻击。

CGI脚本的工作流程通常如下:

  1. 用户通过Web浏览器向服务器发送请求,请求URL指向一个CGI脚本。
  2. Web服务器识别请求是针对CGI脚本的,并暂时停止处理请求,将请求传递给CGI脚本。
  3. CGI脚本执行,处理输入(如表单数据),执行必要的逻辑,生成输出(通常是HTML页面)。
  4. CGI脚本将输出发送回Web服务器。
  5. 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/

image

当前最新版本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测试这一段测试程序注释掉,暂时先配置通过

image

image

编译源代码

make

遇到以下报错:

image

修改代码:

打开compat.h文件

image

再打开boa.c文件,将以下部分注释掉

image

清理编译环境:

make clean

重新编译

make

又报以下错误

image

修改log.c

image

重新编译后,编译成功

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可执行程序

image

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

网页成功出现,与预存图片资源一致

image

6.小结

从上述编译,部署方法可以看出,Boa可以通过编写html的方式来设计web界面

参考资料:

嵌入式http服务器boa 简介_嵌入式boa-CSDN博客

boa交叉编译(移植到arm)-CSDN博客

3.OpenWrt/LEDE

OpenWrt主要用于路由器领域,它有一个组件叫LuCI,来提供一个内置的Web,用于配置路由器的功能参数

LEDE 是 OpenWrt 的一个分支,或者说是副产品,该项目主要关注透明性,协作和分权。LEDE 是 OpenWrt 社区的新生,有很多目标是与 OpenWrt 相同的,但是相比于 OpenWrt 也有很大的区别。

3.1 OpenWrt特点

  1. 开源 :OpenWrt的源代码是开放的,社区驱动,允许用户自由修改和分发。
  2. 高度可定制 :用户可以根据自己的需要安装和配置软件包,以增加新功能。
  3. 社区支持 :有着活跃的社区,提供大量的文档、教程和论坛支持。
  4. 硬件支持广泛 :支持大量的无线路由器和其他网络设备。
  5. 高级网络功能 :包括IPv6支持、防火墙、QoS、动态DNS、VPN等。
  6. 安全性 :定期更新以修复安全漏洞,提供比许多商用固件更高的安全性。

3.2 OpenWrt的应用场景

  1. 自定义路由器固件 :用户可以根据自己的需要定制路由器的功能,比如增强网络安全性、优化性能、添加VPN支持等。
  2. 网络监控和流量控制 :OpenWrt提供了强大的网络监控工具和流量控制功能,适合需要精细管理网络流量的用户。
  3. 物联网网关 :作为物联网设备的网关,OpenWrt可以处理来自传感器和智能设备的网络流量,并与其他网络服务交互。
  4. 无线分布式系统(WDS) :OpenWrt支持无线分布式系统,可以创建一个覆盖广泛区域的无线网络。
  5. 网络存储和媒体服务器 :利用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的特点

  1. 轻量级

    • 非常小的内存和存储空间占用,适合资源受限的环境。
  2. 跨平台

    • 支持多种操作系统,包括 Windows、Linux 和 macOS。
  3. 易于集成

    • 可以轻松集成到现有的 C++ 项目中。
  4. 高性能

    • 利用非阻塞 I/O 和异步处理,提供高性能的 Web 服务。
  5. 安全性

    • 支持 HTTPS/SSL/TLS,保护数据传输安全。
  6. 灵活的路由

    • 提供灵活的路由机制,可以轻松定义 RESTful API。
  7. 模板支持

    • 支持 HTML 模板,方便快速开发动态 Web 页面。
  8. 文件服务

    • 可以作为静态文件服务器,提供 HTML、CSS、JavaScript 等文件。
  9. C++ API

    • 提供 C++ API,允许直接在 C++ 代码中处理 HTTP 请求和响应。
  10. 日志和调试

    • 内置日志系统,方便调试和监控。
  11. 单线程/多线程

    • 支持单线程和多线程模式,可以根据需要选择。

4.2 MicroWebSrv应用场景

  1. 嵌入式设备

    • 在资源受限的嵌入式设备上提供 Web 界面和 API,前提是设备需要支持MicroPython环境。
  2. 物联网(IoT)网关

    • 作为 IoT 设备的网关,处理设备数据并提供远程访问接口。
  3. 小型Web应用

    • 开发小型的 Web 应用,如个人博客、小型企业的内部系统。
  4. 原型开发

    • 快速原型开发和测试,利用其轻量级和易用性。
  5. 教育和学习

    • 作为教学工具,帮助学生学习 Web 服务器和 Web 开发的基础知识。
  6. 本地开发服务器

    • 作为开发者的本地开发服务器,提供静态文件服务和 API 测试。
  7. 远程监控和控制

    • 在工业控制系统中,提供远程监控和控制接口。
  8. 个人云服务

    • 搭建个人云服务,如私有的文件存储和共享服务。
  9. 智能家居

    • 在智能家居系统中,提供设备控制和状态监控的 Web 界面。

MicroWebSrv 的轻量级和灵活性使其成为多种场景下的理想选择,特别是在资源受限的环境中。通过其丰富的功能和简单的集成方式,开发者可以快速构建和部署 Web 服务。

4.3 MircoWebSrc开源库简介

仓库地址:https://github.com/jczic/MicroWebSrv.git

Wiki:Home · loboris/MicroPython_ESP32_psRAM_LoBo Wiki · GitHub

Wiki CN:MicroWebSrv:A micro HTTP Web server that supports WebSockets, html/python language templating and routing handlers, for MicroPython (used on Pycom modules & ESP32) - GitCode

源码结构:

"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对其进行访问。

image

参考资料:

Node-RED-CN:Node-RED : 文档

Node-RED-Eng: Documentation : Node-RED

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

  1. 全功能平台
  • Node.js 是一个广泛使用的开源、跨平台的 JavaScript 运行时环境,它允许开发者在服务器端运行 JavaScript 代码。
  1. 事件驱动和非阻塞I/O
  • Node.js 采用事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接和I/O密集型应用。
  1. NPM(Node Package Manager)
  • Node.js 拥有世界上最大的软件注册表,NPM,提供了大量的开源库和框架,用于各种目的。
  1. 适用于多种场景
  • 从Web开发到网络应用,再到命令行工具,Node.js 都可以胜任。
  1. 性能
  • Node.js 以其高性能和快速响应而闻名,尤其是在处理I/O密集型任务时。
  1. 社区和生态系统
  • Node.js 拥有一个庞大且活跃的开发者社区,不断推动其发展和创新。

Node.js中文网:首页 | Node.js v20 文档

IoT.js

  1. 为IoT设计的轻量级平台
  • IoT.js 是一个基于JavaScript的运行时环境,专为物联网(IoT)设备设计,支持在资源受限的环境中运行。
  1. 轻量级和模块化
  • IoT.js 被设计为轻量级和模块化,使其适合嵌入式设备和微控制器。
  1. 兼容性
  • IoT.js 旨在与Node.js兼容,支持大多数Node.js API和模块。
  1. 资源效率
  • 由于IoT设备通常资源有限,IoT.js 优化了内存和存储使用,以适应这些限制。
  1. 适用于嵌入式系统
  • IoT.js 提供了对硬件接口的直接访问,使其适合直接与传感器和执行器交互。
  1. 跨平台
  • IoT.js 支持多种平台,包括Linux、Windows、macOS以及各种嵌入式平台。
  1. 社区和生态系统
  • 虽然不如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 的一些主要特点:

  1. 轻量级和高性能

    • Lighttpd 设计为轻量级,占用的内存和 CPU 资源很少,特别适合在资源受限的环境中运行,如虚拟主机和嵌入式系统。
  2. 模块化架构

    • Lighttpd 采用模块化设计,可以根据需要启用或禁用模块,提供了高度的灵活性和可扩展性。
  3. 高并发处理能力

    • 它能够处理大量的并发连接,而不会显著消耗系统资源,这使得 Lighttpd 在高流量网站中表现良好。
  4. 支持多种Web技术

    • 支持FastCGI、CGI、SSI、SSL、TLS、IPv6、URL重写、虚拟主机等Web技术。
  5. 配置简单

    • Lighttpd 的配置文件简洁易懂,使得配置和维护变得简单。
  6. 安全性

    • 提供了多种安全特性,包括SSL/TLS支持,以及防止常见的Web攻击,如跨站脚本(XSS)和SQL注入。
  7. 跨平台支持

    • 虽然最初是为Linux设计的,但Lighttpd也支持其他操作系统,包括FreeBSD、OpenBSD、macOS和Windows。
  8. 日志和监控

    • 提供了详细的日志记录功能,有助于监控和调试Web服务器的状态。
  9. 反向代理和负载均衡

    • Lighttpd 可以作为反向代理服务器使用,支持负载均衡,适合构建高性能的Web服务器集群。
  10. REST API支持

    • 支持RESTful API,方便与其他应用程序集成。
  11. WebDAV支持

    • 提供了WebDAV协议支持,允许通过HTTP进行文件管理。
  12. 插件和扩展

    • 拥有一个活跃的社区,提供了许多插件和扩展,以支持更多的功能。
  13. 兼容性

    • 与Apache的配置文件有一定的兼容性,使得从Apache迁移到Lighttpd变得更加容易。

Lighttpd 的这些特点使其成为许多Web应用和网站的理想选择,尤其是那些需要高性能和高并发处理能力的应用。

7.2 lightpd应用场景

  1. 嵌入式设备HTTP服务器:Lightpd可以用于在嵌入式设备上实现HTTP服务器,例如通过手机APP连接到设备的WiFi热点,进行设备的参数配置。这种应用场景下,设备端需要作为一个HTTP服务器,而不需要支持CGI,通过APP展示界面即可。
  2. 支持多种编程语言的Web应用程序:Lightpd支持FastCGI、SCGI和CGI对外部程序的接口,允许用任何编程语言编写的Web应用程序与服务器一起使用。特别是对于PHP的性能,Lightpd的FastCGI可以配置为正确而高效地支持带有操作码缓存(如APC)的PHP。
  3. Web框架:Lightpd是一个流行的Web服务器,用于Catalyst和Ruby on Rails Web框架。它在Python、Perl、Ruby和Lua社区中的受欢迎程度也引起了关注。
  4. 数据库驱动的网站:Lightpd支持WebDNA,这是一种有弹性的内存数据库系统,用于构建数据库驱动的网站。

这些应用场景展示了Lightpd的灵活性和多功能性,使其成为多种Web服务和应用的理想选择。

7.3 lightpd交叉编译

1.源代码下载

Home - Lighttpd - fly light

lighttpd (github.com)

image

2.交叉编译

在树莓派上编译 Lighttpd 需要几个步骤,包括安装依赖、获取 Lighttpd 源代码、配置编译选项以及编译和安装。以下是详细的步骤:

步骤 1: 更新系统包

首先,确保你的树莓派系统是最新的。打开终端并运行以下命令:

sudo apt-get update
sudo apt-get upgrade

步骤 2: 安装依赖

Lighttpd 编译需要一些依赖库,如 libpcre3-devzlib1g-devlibssl-dev。安装这些依赖:

sudo apt-get install build-essential libpcre3-dev zlib1g-dev libssl-dev

步骤 3: 获取 Lighttpd 源代码

从 Lighttpd 的官方网站或其在 GitHub 上的仓库下载最新版本的源代码。你可以使用 wgetgit 来获取源代码:

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博客

posted @ 2024-11-04 16:24  Emma1111  阅读(166)  评论(0编辑  收藏  举报