最稳妥的安装方式是直接用yum或apt安装OpenResty官方仓库包;源码编译仅适用于需禁用模块、更换LuaJIT版本或调试底层等特定场景,官方repo已预装常用模块及依赖,避免手动编译的复杂性与风险。

直接用 yum 或 apt 安装官方仓库包,是最稳妥、最省事的选择;源码编译只在你明确需要关掉某个模块、换 LuaJIT 版本、或调试底层时才值得动手。
CentOS/RHEL 上用 yum 安装 OpenResty
这一步的核心是:别自己下 tar.gz、别自己 ./configure,官方 repo 已打包好所有常用模块(resty.http、resty.redis、SSL 支持等),且自动拉取 pcre-devel、openssl-devel 等运行依赖。
- 先确保
yum-utils已装:sudo yum install -y yum-utils - 加阿里云镜像源(比官网源快且稳定):
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/openresty/yum/openresty.repo - 执行安装:
sudo yum install -y openresty - 验证是否装对:
/usr/local/openresty/nginx/sbin/nginx -v,输出里必须含openresty字样;如果只显示nginx version: nginx/1.x.x,说明装的是系统自带 nginx,不是 OpenResty
Ubuntu/Debian 上用 apt 安装 OpenResty
APT 安装容易卡在 GPG 密钥或代号展开失败上,错一个字符就报 NO_PUBKEY 或 404 Not Found。关键点是密钥格式和 $(lsb_release -sc) 要能正确解析。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 导入密钥必须用
gpg --dearmor转换:wget -O - https://openresty.org/package/pubkey.gpg | sudo gpg --dearmor -o /usr/share/keyrings/openresty.gpg - 写仓库地址时,
$(lsb_release -sc)必须生效;若返回空或报错,手动替换为对应代号(如 Ubuntu 22.04 是jammy):echo "deb [signed-by=/usr/share/keyrings/openresty.gpg] http://openresty.org/package/debian jammy openresty" | sudo tee /etc/apt/sources.list.d/openresty.list - 更新并安装:
sudo apt update && sudo apt install -y openresty - 安装后
openresty命令可能不可用——因为/usr/bin/openresty是软链,PATH 没生效不等于没装上;直接调用/usr/local/openresty/nginx/sbin/nginx更可靠
启动前必须改的配置项
OpenResty 默认不监听 80 端口,也不以 root 权限启动,开箱即用 ≠ 开箱即跑。最常卡住的是权限和配置路径。
- 主配置文件在
/usr/local/openresty/nginx/conf/nginx.conf,不是/etc/nginx/nginx.conf(那是系统 nginx 的) - 启动时报
bind() to 0.0.0.0:80 failed (13: Permission denied)?说明没加user root;——OpenResty 默认用nobody用户启动,而 nobody 无法绑定 80 端口 - 别急着删系统 nginx;如果已装,
sudo yum remove nginx或sudo apt remove nginx更干净,避免端口冲突或 systemctl 服务名混淆
什么时候该选源码编译
源码编译不是“更高级”,而是“更麻烦但更可控”。除非你遇到下面这些情况,否则别碰。
- 要禁用默认模块(比如关掉
http_ssl_module) - 要启用尚未进官方包的第三方模块(如某个未发布的
lua-resty-xxx) - 要调试 OpenResty 或 LuaJIT 底层行为(比如 patch
lj_vm.S) - 内网离线环境,且没有 RPM/DEB 包分发机制——这时才考虑离线 RPM 或源码打包
真正难的不是装上,而是让 nginx.conf 里写的 content_by_lua_block 真的跑起来、不 core dump、不内存泄漏。装只是第一步,后续 Lua 代码的加载路径、模块 require 行为、worker 进程模型,才是容易被忽略的复杂点。


















