一、编译
使用alpine为基础镜像
# 使用Alpine作为基础镜像
FROM alpine:3.18
# 替换为阿里云镜像源,并安装必要的依赖
RUN sed -i 's|https://dl-cdn.alpinelinux.org/alpine|https://mirrors.aliyun.com/alpine|g' /etc/apk/repositories && \
apk add --no-cache \
build-base \
pcre-dev \
openssl-dev \
zlib-dev \
perl \
linux-headers \
&& mkdir -p /usr/local/openresty
# 下载OpenResty源码包
WORKDIR /tmp
RUN wget https://openresty.org/download/openresty-1.21.4.1.tar.gz && \
tar zxpf openresty-1.21.4.1.tar.gz
# 编译并安装OpenResty
WORKDIR /tmp/openresty-1.21.4.1
RUN ./configure --prefix=/usr/local/openresty \
--with-pcre-jit \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
-j2 && \
make && \
make install
# 清理无用文件
RUN rm -rf /tmp/openresty-1.21.4.1*
# 设置工作目录
WORKDIR /usr/local/openresty
# 暴露端口
EXPOSE 80
# 启动命令
CMD ["/usr/local/openresty/nginx/sbin/nginx", "-g", "daemon off;"]
二、优化编译大小
上面编译完457M,多阶段构建可以缩减至25.7M
# stage 1: 构建阶段
FROM alpine:3.21.3 AS builder
ARG OPENRESTY_VERSION=1.27.1.2
# 替换为阿里云源并安装构建依赖
RUN sed -i 's|https://dl-cdn.alpinelinux.org/alpine|https://mirrors.aliyun.com/alpine|g' /etc/apk/repositories && \
apk add --no-cache \
build-base \
pcre-dev \
openssl-dev \
zlib-dev \
perl \
linux-headers
# 下载并解压 OpenResty 源码
WORKDIR /tmp
RUN wget https://openresty.org/download/openresty-${OPENRESTY_VERSION}.tar.gz && \
tar zxpf openresty-${OPENRESTY_VERSION}.tar.gz
# 编译安装 OpenResty
WORKDIR /tmp/openresty-${OPENRESTY_VERSION}
RUN ./configure --prefix=/usr/local/openresty \
--with-pcre-jit \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
-j2 && \
make && \
make install
# 剥离可执行文件
RUN strip /usr/local/openresty/nginx/sbin/nginx
# stage 2: 最终运行环境
FROM alpine:3.21.3
# 安装运行时依赖
# 安装运行时依赖与时区支持
RUN sed -i 's|https://dl-cdn.alpinelinux.org/alpine|https://mirrors.aliyun.com/alpine|g' /etc/apk/repositories && \
apk add --no-cache \
libgcc \
pcre \
openssl \
zlib \
tzdata && \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
# 复制编译好的 OpenResty 文件
COPY --from=builder /usr/local/openresty /usr/local/openresty
# 设置工作目录
WORKDIR /usr/local/openresty
# 暴露端口
EXPOSE 80
# 启动命令
CMD ["/usr/local/openresty/nginx/sbin/nginx", "-g", "daemon off;"]
三、编译arm版
编译arm版docker(10代i74c4g编译1小时)
需要安装dockerbuildx
docker buildx create --use --name=mybuilder-cn --driver docker-container --driver-opt image=uhub.service.ucloud.cn/iatc/cn-buildkit:latest
docker buildx use mybuilder-cn
docker buildx build --platform linux/arm/v7 -t openresty-arm:latest . --load
docker buildx rm mybuilder-cn
在x86机器上运行armv7版
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker run -it --platform=linux/arm/v7 openresty-arm:latest
docker版的helloworld
docker exec -it openresty sh
cd /usr/local/openresty/nginx/conf
#编辑nginx.conf 将location/内容替换为
location / {
default_type text/plain;
content_by_lua_block {
ngx.say("Hello World")
}
}
#然后保存
#最后重载配置
/usr/local/openresty/nginx/sbin/nginx -s reload
四、常见使用场景
1. API 网关
OpenResty 作为轻量级、高性能的 API 网关,广泛用于微服务架构中实现路由、鉴权、限流等功能。
✅ 开源项目举例:
Kong
基于 OpenResty 构建的企业级 API 网关;
支持插件化扩展(如 JWT 鉴权、IP 限流、OAuth2);
提供管理界面和集群支持。
Orange
国内开源的类 Kong 网关系统;
支持动态路由、熔断、监控等功能;
提供 Web UI 进行配置管理。
2. Web 防火墙(WAF)
利用 Lua 脚本编写规则,实现对请求内容的深度检测和过滤,防御 SQL 注入、XSS 等攻击。
✅ 开源项目举例:
ngx_lua_waf
简洁高效的 WAF 实现;
支持 URL、User-Agent、Referer 等维度过滤;
可嵌入到任意基于 OpenResty 的应用中。
ModSecurity for Nginx(非纯 Lua 实现但常与 OpenResty 搭配使用)
企业级 Web 应用防火墙;
支持 OWASP CRS 规则集;
可配合 OpenResty 实现更完整的安全防护体系。
3. 反向代理与负载均衡
OpenResty 继承了 Nginx 强大的反向代理能力,并通过 Lua 实现更灵活的调度逻辑。
✅ 开源项目举例:
OpenResty Edge
官方商业产品,但也提供部分开源组件;
支持灰度发布、A/B 测试、动态负载均衡等高级功能;
适用于 CDN、边缘计算等场景。
apisix
Apache 顶级项目;
基于 OpenResty 实现,具备动态路由、负载均衡、健康检查等功能;
插件丰富,社区活跃,适合中小型企业部署网关服务。
4. 缓存层
在边缘层实现响应缓存,提升整体系统的性能和吞吐能力。
✅ 开源项目举例:
lua-resty-http + 自定义缓存逻辑
利用 lua-resty-http 请求后端服务;
结合 ngx.shared.DICT 实现本地内存缓存;
可构建一个轻量级的 HTTP 缓存中间件。
fastcgi-cache-purge(虽然不是 Lua 实现,但常结合 OpenResty 使用)
实现 FastCGI 缓存清除;
配合 OpenResty 的缓存模块实现高效边缘缓存控制。
5. 实时服务(长连接、WebSocket)
利用 OpenResty 的异步非阻塞特性,实现 WebSocket、SSE、长轮询等实时通信。
✅ 开源项目举例:
resty.websocket
官方提供的 WebSocket 模块;
支持客户端和服务端双向通信;
可用于聊天、推送、在线游戏等实时服务。
goim(虽为 Go 实现,但常搭配 OpenResty 使用)
高性能 IM 推送系统;
OpenResty 可作为接入层处理 WebSocket 连接;
后端由 goim 处理消息分发,形成完整实时通信链路。
6. 认证授权中心
在边缘层统一处理身份验证逻辑,如 OAuth2、JWT、API Key 等。
✅ 开源项目举例:
apisix + JWT/OAuth 插件
Apisix 提供多种鉴权插件(JWT、Key Auth、OAuth2);
所有鉴权逻辑运行在 OpenResty 上,性能优异;
可快速搭建统一的认证授权网关。
auth-jwt(小型开源项目)
基于 OpenResty 实现的 JWT 认证中间件;
可集成到现有服务前做统一身份校验;
适合小型服务或边缘网关场景。
7. 日志与监控采集
在边缘层采集访问日志、指标数据,用于后续分析、告警、追踪。
✅ 开源项目举例:
loggly-openresty
将访问日志发送到 Loggly 平台;
利用 Lua 协程异步发送日志,不影响主流程;
可拓展对接 ELK、Prometheus 等系统。
nginx-lua-prometheus
Prometheus 官方推荐的指标暴露库;
支持记录 QPS、延迟、状态码等指标;
可直接通过 /metrics 接口被 Prometheus 抓取。