讲师中心 微信公众号
AI工具推荐 视频效率加速

Linux环境下搭建OpenResty 实现高性能动态脚本处理教程

小强君_8972

小强君_8972

发布时间:2026-04-09 14:49:32

|

171人浏览过

|

来源于php中文网

原创

OpenResty 不应直接用系统包管理器安装,因其版本严重滞后,易致高并发下内存泄漏和OOM;应下载官方最新包安装,并注意lua_code_cache、access_by_lua_block与content_by_lua_block分工及lua_shared_dict的TTL设置。

linux环境下搭建openresty 实现高性能动态脚本处理教程

OpenResty 安装为什么不能直接用系统包管理器?

大多数 Linux 发行版的 apt 或 yum 仓库里的 OpenResty 版本严重滞后(比如 Ubuntu 22.04 默认是 1.19.x),而新版本修复了关键的 LuaJIT 内存泄漏、ngx.timer.at 精度问题,还支持 lua-resty-http v0.16+ 的连接池自动回收。直接安装旧版,上线后容易在高并发下出现 worker 进程 RSS 持续上涨甚至 OOM。

实操建议:

  • 从 官方 Linux Packages 页面 下载对应发行版的最新 .deb 或 .rpm 包(如 openresty-1.21.4.2-1~jammy.amd64.deb),避免源码编译带来的依赖混乱
  • 安装前先卸载系统自带的 nginx 或 openresty:运行 sudo apt remove nginx* openresty(Ubuntu/Debian)或 sudo yum remove nginx* openresty(CentOS/RHEL)
  • 安装后检查路径:默认安装到 /usr/local/openresty,nginx 可执行文件实际是 /usr/local/openresty/nginx/sbin/nginx

nginx.conf 里 lua_code_cache off 仅用于开发调试

设成 off 确实能让每次请求都重载 Lua 文件,方便改完代码立刻看到效果,但会彻底破坏 OpenResty 的性能根基——Lua 模块缓存和字节码缓存。线上开启它,QPS 会跌 60% 以上,且 require 调用变成磁盘 I/O,容易触发 too many open files 错误。

实操建议:

  • 开发环境可在 http 块中加:lua_code_cache off;,但必须限定在 127.0.0.1 或内网 IP 访问的 server 块里,禁止暴露到公网
  • 生产环境必须保持 on,热更新靠 kill -HUP $(cat /usr/local/openresty/nginx/logs/nginx.pid) 或配合 lua-resty-upstream-healthcheck 实现平滑 reload
  • 若需局部调试单个 Lua 文件,可用 package.loaded["mymodule"] = nil + require("mymodule") 手动重载,比全局关 cache 更安全

access_by_lua_block 和 content_by_lua_block 的分工陷阱

很多人把鉴权、限流、参数校验全塞进 content_by_lua_block,结果发现日志里大量 500 错误却没报错信息——因为 content_by_lua_block 在输出阶段才执行,一旦出错,header 已经发送,Nginx 只能返回空响应或默认错误页;而 access_by_lua_block 在 access 阶段运行,此时还能用 ngx.exit(ngx.HTTP_FORBIDDEN) 精准控制状态码和响应体。

实操建议:

  • 身份校验、IP 黑白名单、频率限制(resty.limit.count)、请求头合法性检查,一律放 access_by_lua_block
  • content_by_lua_block 只做业务逻辑处理和响应生成,比如调用后端 API、模板渲染、JSON 构造
  • 注意:两个 block 共享同一个 Lua VM,但 ngx.ctx 是请求级隔离的,跨 block 传数据要用 ngx.ctx.foo = "bar",别用全局变量

lua_shared_dict 内存泄漏的典型表现与规避方式

用 lua_shared_dict 存 token 缓存或计数器很常见,但若忘记设置过期时间或未清理旧 key,内存占用会持续增长,nginx -t 检查不出问题,直到 worker process is shutting down on signal 日志频繁出现,或 curl http://127.0.0.1:8080/nginx_status 显示 Shared memory zones: ... used: 98%。

实操建议:

  • 定义 dict 时务必指定大小:如 lua_shared_dict auth_cache 128m;,不要写 1g 图省事,Linux 内存分配不是按需增长的
  • 写入必须带 TTL:auth_cache:set("token_abc", {user_id=123}, 3600),第三个参数是秒数,不传则永不过期
  • 定期清理用不到的 key:可起一个 ngx.timer.every(60, function() ... end) 定时器扫描并 delete,但注意别在 timer 回调里做阻塞操作(如同步 HTTP 请求)

真正难的不是让脚本跑起来,而是让几百个并发请求持续跑一周后,内存不涨、连接不堆积、日志不刷屏。这些细节没压到线上流量里,根本看不出问题。

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

403

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3427

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

6105

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

561

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1476

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3958

2024.08.07

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

122

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

477

2026.01.13

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

20

2026.10.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn