ARM64 架构下编译支持 ngx_http_lua_module 的 Nginx —— Dockerfile 实践

news/2025/10/31 16:11:04/文章来源:https://www.cnblogs.com/echohye/p/19180320

🧾 ARM64 架构下编译支持 ngx_http_lua_module 的 Nginx —— Dockerfile 实践

一、📘 背景

ngx_http_lua_module 是 OpenResty 的核心模块之一,使 Nginx 可以直接执行 Lua 脚本,实现灵活的动态逻辑处理,例如:

  • 动态负载均衡
  • 请求内容过滤
  • 动态缓存控制
  • 自定义鉴权逻辑

官方的 Nginx 镜像默认 不包含 Lua 支持,因此需要通过编译源码的方式添加。


二、🧩 编译所需组件

编译时需要以下依赖:

依赖包 说明
build-essential 基础编译工具(gcc、make 等)
libpcre3 / libpcre3-dev Nginx 正则匹配模块依赖
zlib1g / zlib1g-dev Nginx 压缩模块依赖
openssl / libssl-dev HTTPS 支持
wget / git 下载源码
gettext-base 提供 envsubst 命令用于模板变量替换

额外依赖组件:

组件 说明
LuaJIT 高性能 Lua 虚拟机,Nginx 的 Lua 模块依赖它
lua-nginx-module Nginx 与 LuaJIT 的集成模块
lua-resty-core / lua-resty-lrucache OpenResty 常用 Lua 库(必须安装,否则报 “resty.core not found”)

三、🛠️ Dockerfile 分为两阶段

第一阶段:编译(builder)
第二阶段:运行时(runtime)

✅ 第一阶段:编译阶段(builder)

目标:在 arm64v8/ubuntu:22.04 上编译 Nginx + Lua 模块。

# =========================
# Builder
# =========================
FROM arm64v8/ubuntu:22.04 AS builderRUN apt-get update && apt-get install -y \build-essential \libpcre3 libpcre3-dev \zlib1g zlib1g-dev \openssl libssl-dev \wget git ca-certificates \&& rm -rf /var/lib/apt/lists/*WORKDIR /optENV NGINX_VERSION=1.24.0
ENV LUAJIT_VERSION=2.1-20230410
ENV LUA_MODULE_VERSION=0.10.29# 下载 Nginx
RUN wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && \tar -zxvf nginx-${NGINX_VERSION}.tar.gz# 编译 LuaJIT
RUN git clone https://github.com/openresty/luajit2.git -b v${LUAJIT_VERSION} && \cd luajit2 && make && make install# 下载 lua-nginx-module
RUN git clone https://github.com/openresty/lua-nginx-module.git -b v${LUA_MODULE_VERSION}# 下载并安装 lua-resty-core 和 lua-resty-lrucache
RUN git clone https://github.com/openresty/lua-resty-core.git /opt/lua-resty-core && \git clone https://github.com/openresty/lua-resty-lrucache.git /opt/lua-resty-lrucache && \mkdir -p /usr/local/share/lua/5.1/resty && \cp -r /opt/lua-resty-core/lib/resty/* /usr/local/share/lua/5.1/resty/ && \cp -r /opt/lua-resty-lrucache/lib/resty/* /usr/local/share/lua/5.1/resty/# 环境变量
ENV LUAJIT_LIB=/usr/local/lib
ENV LUAJIT_INC=/usr/local/include/luajit-2.1WORKDIR /opt/nginx-${NGINX_VERSION}# 编译 Nginx + Lua 模块,路径改为 /etc/nginx
RUN ./configure \--prefix=/etc/nginx \--sbin-path=/etc/nginx/sbin/nginx \--conf-path=/etc/nginx/nginx.conf \--error-log-path=/etc/nginx/logs/error.log \--http-log-path=/etc/nginx/logs/access.log \--pid-path=/var/run/nginx.pid \--lock-path=/var/run/nginx.lock \--with-cc-opt="-O2 -I${LUAJIT_INC}" \--with-ld-opt="-L${LUAJIT_LIB} -Wl,-rpath,${LUAJIT_LIB}" \--with-http_ssl_module \--with-http_v2_module \--with-http_realip_module \--with-threads \--with-http_stub_status_module \--add-module=/opt/lua-nginx-module \&& make -j$(nproc) \&& make install

✅ 第二阶段:运行时阶段(runtime)

目标:生成体积更小、运行时可直接使用的镜像。

# =========================
# Runtime image
# =========================
FROM arm64v8/ubuntu:22.04RUN apt-get update && apt-get install -y \libpcre3 zlib1g openssl gettext-base \&& rm -rf /var/lib/apt/lists/*# 创建 nginx 用户和组
RUN groupadd -r nginx && useradd -r -g nginx nginx \&& mkdir -p /var/log/nginx \&& chown -R nginx:nginx /var/log/nginx# 拷贝 Nginx 安装目录和 Lua 库
COPY --from=builder /etc/nginx /etc/nginx
COPY --from=builder /usr/local/lib/libluajit-5.1.so* /usr/local/lib/
COPY --from=builder /usr/local/share/lua/5.1 /usr/local/share/lua/5.1ENV PATH=/etc/nginx/sbin:$PATH
ENV LD_LIBRARY_PATH=/usr/local/lib# 暴露端口
EXPOSE 80 443# 默认命令
CMD ["nginx", "-g", "daemon off;"]

四、📂 目录结构说明

编译完成后 /etc/nginx 目录结构:

/etc/nginx/
├── sbin/nginx                # Nginx 可执行文件
├── conf/nginx.conf           # 主配置文件
├── logs/                     # 日志目录
└── modules/                  # 可选的动态模块目录

Lua 相关模块位置:

/usr/local/share/lua/5.1/resty/├── core/├── lrucache/└── ...

五、⚙️ 验证 Lua 模块是否生效

进入容器后执行:

nginx -V 2>&1 | grep lua

输出应包含:

--add-module=/opt/lua-nginx-module

再创建测试配置 /etc/nginx/conf.d/lua_test.conf

server {listen 80;location /lua {default_type text/plain;content_by_lua_block {ngx.say("Hello from Lua in ARM64 Nginx!")}}
}

启动 nginx 后访问 /lua,应输出:

Hello from Lua in ARM64 Nginx!

六、🧰 常见问题与解决方案

错误信息 原因 解决方案
ngx_http_lua_module requires LuaJIT 2.x LuaJIT 未安装或版本错误 确认 LUAJIT_INCLUAJIT_LIB 环境变量设置正确
resty.core not found 没有安装 lua-resty-core 手动拷贝 core 与 lrucache 到 /usr/local/share/lua/5.1/resty
nginx: [emerg] getpwnam("nginx") failed 配置中使用 user nginx; 但用户不存在 Dockerfile 中添加 useradd -r nginx
could not open error log file /var/log/nginx 目录不存在或无权限 创建目录并设置权限
/usr/sbin/nginx: not found PATH 或编译路径不一致 使用 --sbin-path=/etc/nginx/sbin/nginx 并更新 PATH

七、🚀 构建与运行

# 构建镜像
docker build -t nginx-lua:arm64 .# 启动容器
docker run -d -p 8080:80 nginx-lua:arm64# 测试访问
curl http://localhost:8080/lua

输出:

Hello from Lua in ARM64 Nginx!

八、🌟 进阶优化建议

  1. 可选优化:多阶段裁剪镜像

    • 使用 FROM arm64v8/alpine 作为 runtime 基础镜像,体积更小;
    • 但需要手动安装 musl 编译 LuaJIT,过程略复杂。
  2. 可选优化:OpenResty 替代方案

    • 如果目标仅是使用 Lua,可以直接用 openresty/openresty:arm64 镜像;
    • 该镜像内置所有 Lua 模块,无需自己编译。
  3. 环境变量模板渲染

    • 可使用 envsubst 在容器启动时自动替换 Nginx 配置中的变量。

✅ 总结

模块 路径 说明
Nginx 主目录 /etc/nginx 标准安装目录
Nginx 二进制 /etc/nginx/sbin/nginx 执行文件路径
LuaJIT 库 /usr/local/lib/libluajit-5.1.so 动态链接库
Lua 脚本库 /usr/local/share/lua/5.1/resty/ Lua 模块代码
日志路径 /var/log/nginx/ 需确保 nginx 用户可写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/951929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx + Lua 实现每日访问次数限制与防盗链校验

🧾 Nginx + Lua 实现每日访问次数限制与防盗链校验(以 /cmap 图片接口为例) 一、应用场景 /cmap 是一个图片接口(通过 proxy_pass 转发到后端), 需要实现:每日最多访问 1000 次 防盗链检查(仅允许特定来源 Re…

Photoshop 2026 v27.0正式版终于来了,AI 加持让创意更自由

在数字图像与图形设计领域,创意工具的选择直接影响创作效率与成果质量。Adobe Photoshop 凭借卓越性能与前沿工具,长期占据全球设计领域核心地位,成为创意从构想落地的可靠平台。伴随设计需求的日益提升,Adobe 近期…

大故障,阿里云核心域名疑似被劫持 - 教程 (转载)

原始链接:https://www.cnblogs.com/yfceshi/p/18992502 2025年6月5日凌晨,阿里云多个服务突发异常,罪魁祸首居然是它自家的“核心域名”——aliyuncs.com。包括对象存储OSS、内容分发 CDN、镜像仓库 ACR、云解析 DN…

学习笔记:乘法逆元

问题引入 如何求 \(\dfrac{a}{b}\)?小学数学告诉我们,\(\dfrac{a}{b} = a \times \dfrac{1}{b}\)。 那么若 \(a, b, p \in \mathrm{\mathbf{Z}}\),如何求 \(\dfrac{a}{b} \bmod \ p\),并且 \(a\) 和 \(b\) 都是八常…

2025年北京保洁服务公司推荐:海獭顾家保洁服务公司深度测评

TOP1推荐:海獭顾家(北京)保洁服务有限公司 评价指数:★★★★★ 口碑评分:98分 行业表现:A++++级 介绍:海獭顾家(北京)保洁服务有限公司从事专业保洁服务长达20年,注册资本501万元。作为专业石材工程施工单位…

三角函数:从入门到入门

必修一三角函数:从入门到入门 任意角与弧度制始边近似视为x轴正半轴从始边,逆时针转到一个终边,视为正角,反之亦然射线,$ \alpha = \alpha + 360^{\circ} \times k , k \in \ \mathbb{Z} $直线,$ 360 -> 180 …

1063:最大跨度值

题目描述】 给定一个长度为n的非负整数序列,请计算序列的最大跨度值(最大跨度值 = 最大值减去最小值)。 【输入】 一共2行,第一行为序列的个数n(1 <= n <= 1000),第二行为序列的n个不超过1000的非负整数,整…

学术会议合集 | 机器人、大数据、社会科学、医学人工智能等EI会议合集

机器人、大数据、社会科学、医学人工智能等EI会议合集第二届机器人前沿技术与创新国际会议(FTIR 2025) 2025 2nd International Conference on Frontier Technology and Innovation in Robotics 重要信息 大会官网:…

基于块匹配的MATLAB视频去抖动算法

一、核心代码 1. 视频读取与预处理 %% 视频参数设置 videoFile = input.mp4; reader = vision.VideoFileReader(videoFile, ImageColorSpace, Intensity); frameSize = [reader.VideoSize(2), reader.VideoSize(1)]; %…

2025年回转窑干燥机设备定制厂家权威推荐榜单:回转窑滚筒干燥机/回转窑设备/回转窑干燥机源头厂家精选

在工业干燥领域,回转窑干燥设备的市场需求持续增长,2024年国内市场规模已达87亿元,预计2025年将突破92亿元,年复合增长率稳定在6%-8%之间。 回转窑干燥机作为工业干燥领域的核心设备,凭借其处理量大、适应性强、运…

资源字典(ResourceDictionary)学习笔记

这个世界没你想的那么坏但也没你想的那么好——烽火戏诸侯《剑来》1️⃣ 基础概念与用法 🔹 什么是 ResourceDictionary? 在 WPF(Windows Presentation Foundation) 中,ResourceDictionary(资源字典)是一种特…

2025年电子设备厂家年度排名推荐,幸运电子设备有限公司

在当今科技飞速发展的时代,电子设备的精准性、稳定性和创新性对于各个行业的重要性不言而喻。众多企业和科研机构在选购电子设备时,常常会面临 幸运电子设备有实力吗幸运电子设备的创新理念强吗 等诸多疑问。在此背景…

如何一句话证明你懂项目管理或当过项目经理?

项目管理的复杂,恰恰在于它需要在变化中找平衡。而项目管理的价值,也正在于把不确定的挑战,通过系统性的把控,一步步变成可落地、可交付的成果。计划就是用来被打破的——这大概是每个项目经理的痛。 在过去做项目…

linux 使用指南

编译方法:touch a.cpp gedit a.cpp g++ a.cpp -o a.exe -O2 -std=c++14 ./a.exe

2025年不锈钢带制造厂推荐:五大不锈钢带制造企业深度解析

TOP1推荐:深圳市富鹏达金属材料有限公司 评价指数:★★★★★ 口碑评分:98分 行业表现:A++++级 深圳市富鹏达金属材料有限公司电话号码:13556896920,自2008年成立以来,始终专注于金属材料领域,尤其在不锈钢带制…

10-30 题

10-30 题 Joke - 题目 - QOJ.ac 先把 \(q\) 按照 \(p\) 排序,这样不会影响答案。 先假设我们已知所有的 \(q_i\),怎么求合法 \(s\) 的方案数。考虑把 \((i,q_i)\) 画到二维平面上,那么我们可以画一条不降的折线表示…

微信支付经验总结

首先微信下载的几个证书需要区分好:apiclient_cert.p12( 证书 + 私钥 的 PKCS12 容器,win可以直接执行)、apiclient_cert.pem(商户API证书-公钥)、apiclient_key.pem(商户API证书-私钥)之前遇到前端那调微信支付…

2025年ITSM平台演进趋势与选型指南:大模型智能体引领、数据AI底座支撑、业务价值驱动运维决策

2025年ITSM平台演进趋势与选型指南:大模型智能体引领、数据AI底座支撑、业务价值驱动运维决策$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");2025年IT服务…

2025年专业三防漆厂家排名:三防漆厂商技术实力深度剖析

TOP1推荐:佛山市鲸鲨化工有限公司评价指数:★★★★★ 口碑评分:99分 行业表现:A+++++级佛山市鲸鲨化工有限公司成立于1961年,是新中国成立后全国早批集涂料、合成树脂和颜料的研发、生产、销售于一体的国家重点精…

国标GB28181算法算力平台EasyGBS录像 “罢工”?就因没注意这个默认设置!

国标GB28181算法算力平台EasyGBS录像 “罢工”?就因没注意这个默认设置!今天跟大伙儿唠个实用的——你们有没有在EasyGBS平台上设好录像计划,结果它就是不干活儿的情况?其实啊,问题出在一个特小的细节上,好多人都…