嵌入式Web服务器lighttpd交叉编译详解

目录

1. 引言

2. 准备工作

2.1 环境要求

2.2 依赖库下载

3. 交叉编译步骤

3.1 交叉编译依赖库(以PCRE为例)

3.2 交叉编译lighttpd

4. 部署到目标设备

4.1 复制文件到嵌入式设备

4.2 修改配置文件(lighttpd.conf)

6. 总结


1. 引言

lighttpd 是一个轻量级、高性能的Web服务器,专为嵌入式环境和资源受限场景设计。其低内存占用和高并发处理能力使其成为物联网设备、路由器等嵌入式系统的理想选择。若您的项目需要 低资源消耗、快速部署、高并发静态服务,lighttpd是嵌入式领域更优的选择。

Web服务器软件对比

特性lighttpdNginxApache
内存占用3-5MB10-20MB50-100MB
并发模型单线程事件驱动多进程事件驱动多线程/多进程
配置复杂度简单中等复杂
嵌入式适用性★★★★★★★★☆☆★☆☆☆☆
动态内容支持有限(需FastCGI)强大(Lua/JIT)强大(mod_php)

本文详细介绍如何通过交叉编译,将lighttpd移植到ARM/Linux嵌入式平台。 

2. 准备工作

2.1 环境要求

  • 开发机:WSL2/Ubuntu 20.04

  • 目标平台:ARM架构嵌入式设备x210

  • 交叉编译工具链:arm-none-linux-gnueabi-gcc 2014.05

  • lighttpd版本:1.4.39

2.2 依赖库下载

lighttpd需要一些依赖以下库,需提前交叉编译:

  • PCRE(正则表达式支持)

 PCRE 全称:Perl Compatible Regular Expressions,提供与Perl语言语法高度兼容的正则表达式库,用于字符串匹配、替换、提取等操作。它是轻量级、高性能的正则表达式解析引擎,广泛应用于开源软件(如Nginx、Apache、lighttpd)中实现路由、重写规则等功能。

如果编译时不带PCRE,启动时程序可能报这样的错误:

can't handle '$HTTP[url] =~ ...' as you compiled without pcre support.
(perhaps just a missing pcre-devel package ?)

这是因为默认的配置文件中使用了很多这样的语法,为了方便使用,还是编译PCRE为好。 PCRE有两个版本,PCRE 8.X和PCRE2 10.X,不同的lighttpd用的版本可能不一样。本文使用的lighttpd是1.4.39,使用的PCRE是8.45。

  • Zlib、bzip2等(压缩功能)

本次编译忽略这些库,暂时用不到相关功能。

  • OpenSSL(HTTPS功能)

由于我们主要是在局域网内部测试,对安全性要求不高,本次编译忽略SSL功能,所以不编译这个库。

3. 交叉编译步骤

3.1 交叉编译依赖库(以PCRE为例)

编译命令如下:

tar -xvf pcre-8.45.tar.gz
cd pcre-8.45
 ./configure CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ --host=arm-linux target=arm-linux --prefix=/mnt/d/lighttpd/pcre-8.45/install --enable-unicode-properties --enable-utf8 
make && make install

3.2 交叉编译lighttpd

编译命令如下:

tar -xvf lighttpd-1.4.69.tar.gz
cd lighttpd-1.4.69

# 设置交叉编译工具前缀
CROSS_COMPILE=arm-none-linux-gnueabi-

# 设置工具链路径
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export AR=${CROSS_COMPILE}ar
export RANLIB=${CROSS_COMPILE}ranlib
export STRIP=${CROSS_COMPILE}strip
export PATH=$PATH:/mnt/d/lighttpd/pcre-8.45/install/bin
export CPPFLAGS="-I/mnt/d/lighttpd/pcre-8.45/install/include"
export LDFLAGS="-L/mnt/d/lighttpd/pcre-8.45/install/lib"

# 配置编译选项
./configure \
  --host=arm-linux \
  --prefix=/var/lighttpd/ \
  --without-openssl \
  --without-zlib \
  --without-bzip2 \
  --with-pcre

make -j16
sudo make install

 这里做点解释:

  1. 之所以把pcre编译后的bin目录加入PATH是为了让lighttpd交叉编译时能够找到pcre-config脚本。
  2. 这里的prefix不能随便设置,因为lighttpd会把这个路径以硬编码的形式写到程序中,所以这个路径必须和开发板上实际部署的路径一致,否则在开发板上加载插件时会报告错误。

4. 部署到目标设备

4.1 复制文件到嵌入式设备

首先需要把pcre的运行库拷贝到开发板的/usr/lib下。

然后把主机/var/lighttpd目录下的所有文件拷贝到开发板的/var/lighttpd目录下。然后在/var/lighttpd目录下建立几个文件夹:cache、cgi-bin、config、log、sockets、upload、vhosts、htdocs,并将并将源码包中doc/config目录下的conf.d目录、lighttpd.conf和modules.conf复制到/var/lighttpd/config中。

4.2 修改配置文件(lighttpd.conf)

下面以文件比较的方式列出我对配置文件的修改:

这些修改都是最脚本的。

5. 验证与测试

  • 检查进程ps | grep lighttpd

  • 日志查看tail -f /var/log/lighttpd/error.log

  • 访问测试用浏览器访问http://目标设备IP 

在htdocs目录下建立一个index.html文件,输入以下内容:

<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>欢迎使用 Lighttpd</title>
    <style>
        body {
            margin: 0;
            padding: 0;
            /* 背景颜色渐变动画 */
            animation: bgGradient 10s linear infinite;
        }

        @keyframes bgGradient {
            0% {
                background-color: #007bff;
            }

            50% {
                background-color: #00c6ff;
            }

            100% {
                background-color: #007bff;
            }
        }

        .welcome {
            text-align: center;
            margin-top: 100px;
            font-size: 48px;
            color: white;
            /* 文字旋转动画 */
            animation: rotateText 5s linear infinite;
        }

        @keyframes rotateText {
            from {
                transform: rotate(0deg);
            }

            to {
                transform: rotate(360deg);
            }
        }
    </style>
</head>

<body>
    <div class="welcome">
        欢迎使用 Lighttpd!
    </div>
</body>

</html>

然后用浏览器访问设备的IP地址就可以看到一个旋转动画的界面。 

6. 总结

通过交叉编译,我们成功在ARM设备上部署了高性能的lighttpd服务器。此方法同样适用于其他嵌入式架构(如MIPS、RISC-V)。欢迎在评论区交流问题!希望这篇指南能帮助您顺利完成lighttpd的移植!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神一样的老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值