0Pricing
Lua Academy · 课时

OpenResty 架构

理解 ngx_lua 如何在 Nginx 请求阶段嵌入 LuaJIT。

OpenResty 架构 是 CoddyKit 上的免费 Lua Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Lua Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Lua Academy 课程共包含 4 节课。

OpenResty 是什么?

OpenResty 是一个将 LuaJIT 嵌入 Nginx 的 Web 平台。它将 Nginx 转变为功能完整的 Web 应用程序服务器,使 Lua 代码能够处理请求。

ngx_lua 模块

ngx_lua 模块将 LuaJIT 集成到 Nginx 中。它提供 ngx.* API,用于访问请求/响应数据、定时器、共享内存和协程套接字。

Nginx 请求阶段

OpenResty 将 Nginx 的请求处理阶段公开为 Lua 钩子:init_by_lua、access_by_lua、content_by_lua、header_filter_by_lua、log_by_lua。

nginx.conf 基础

在 nginx.conf 中使用适当阶段的指令配置 Lua 处理程序。

# nginx.conf snippet
server {
  listen 80;
  location /hello {
    content_by_lua_block {
      ngx.header["Content-Type"] = "text/plain"
      ngx.say("Hello from Lua!")
    }
  }
}

每请求一个协程模型

每个传入请求都会获得自己的 Lua 协程。当协程让出执行权(例如等待数据库响应)时,Nginx 可以处理其他请求。这使得高并发成为可能,同时不会发生阻塞。

ngx API

主要的 ngx 函数包括:ngx.say()、ngx.print()、ngx.header、ngx.var、ngx.req.*、ngx.status 和 ngx.exit()。

共享内存状态

工作进程通过 ngx.shared.DICT 共享数据——这是在 nginx.conf 中声明并具有固定内存大小的共享字典。

# nginx.conf
lua_shared_dict my_cache 10m;
-- In Lua:
ngx.shared.my_cache:set("key", "value", 60)

协程套接字

OpenResty 的协程套接字提供非阻塞 TCP/UDP 和 HTTP 支持。它们与 Nginx 的事件循环集成,因此 Lua 可以执行异步 I/O,而不会阻塞工作进程。

定时器 API

ngx.timer.at(delay, fn) 会安排 Lua 函数在延迟后运行。ngx.timer.every(interval, fn) 会定期运行该函数。

性能概览

OpenResty 每个工作进程可以处理数万条并发连接。结合 LuaJIT 的速度和 Nginx 久经验证的 I/O 多路复用能力,它在 I/O 密集型工作负载方面可以与 Go 和 Node.js 竞争。

常见使用场景

  • API 网关和速率限制。
  • 身份验证与授权中间件。
  • 动态请求路由。
  • Redis 和 Memcached 缓存层。

OpenResty 问题

OpenResty 如何实现高并发?

回顾:OpenResty 架构

OpenResty 将 LuaJIT 嵌入 Nginx。每个请求都作为协程运行。ngx.* API 提供对请求与响应数据、共享内存、定时器以及非阻塞协程套接字的访问。

常见问题解答

「OpenResty 架构」课时是免费的吗?

是的 — 「OpenResty 架构」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Lua Academy 课程的其余内容,请升级到 CoddyKit PRO。 Lua Academy 课程共包含 4 节课。

「OpenResty 架构」这节课中我会学到什么?

理解 ngx_lua 如何在 Nginx 请求阶段嵌入 LuaJIT。 你通过在浏览器中直接运行的动手代码来练习 Lua Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Lua Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Lua Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「OpenResty 架构」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Lua Academy 课中编写并运行代码吗?

能。每节 Lua Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. OpenResty 架构
  2. 在 Lua 中处理 HTTP 请求
  3. Cosocket 和非阻塞 TCP
  4. 共享内存字典
← 返回 Lua Academy