https://www.bilibili.com/vide…
明天我就来演示一下如何在 OpenResty 利用中编写本人的 Lua 模块,一步一步来。
让咱们把咱们简略的 OpenResty 利用放到一个新的目录中,命名为 test-module
。
cd ~/
mkdir test-module/
cd test-module/
而后咱们像平常一样创立子目录构造。
mkdir logs conf lua
请留神,与上一篇教程中的“Hello World”示例不同,咱们在这里创立了一个 lua/
目录来寄存咱们的 lua 模块文件。
当初让咱们在 lua
子目录下创立咱们本人的 Lua 模块文件,命名为 hello.lua
。
vim lua/hello.lua
咱们进行如下编辑操作:
- 申明 Lua 模块表
_M
。 - 而后给这个 Lua 模块增加一个名为
greet
的函数。 - 最初,别忘了在最初返回模块表。
local _M = {}
function _M.greet(name)
ngx.say("Greetings from", name)
end
return _M
搞定!一个很简略的 Lua 模块就实现了。
当初是创立 nginx.conf
配置文件的时候了。
vim conf/nginx.conf
咱们疾速实现下列编辑操作:
- 咱们疾速写出绝对固定的配置。
- 在
http {}
配置块中,咱们应该通知 OpenResty 咱们的 Lua 模块在哪里。 - 请留神,非凡变量
$prefix
在运行时被 nginx 的-p
选项值所代替。 - 而后咱们创立一个 HTTP 服务器,监听 8080 端口。
- 并在根地位配置
content_by_lua"_block
。 - 这里咱们用
require
内置函数加载 Lua 模块hello
。 - 咱们用一个参数调用它的
greet
函数。
worker_processes 1;
events {worker_connections 1024;}
http {
lua_package_path "$prefix/lua/?.lua;;";
server {
listen 8080 reuseport;
location / {
default_type text/plain;
content_by_lua_block {
local hello = require "hello"
hello.greet("a Lua module")
}
}
}
}
咱们当初就来查看整个目录树。
tree .
看起来不错。
当初启动这个 OpenResty 应用程序。
nginx -p $PWD/
是时候用 curl
命令行工具查问咱们的 HTTP 接口了。
curl 'http://127.0.0.1:8080/'
酷,咱们的 Lua 模块开始工作了。
咱们也能够在网页浏览器中进行测试。
如果你看到了 500 谬误页面,那么你的 Lua 代码肯定有谬误。
在这种状况下,你应该查看 logs
子目录下的 error.log
文件。
tail logs/error.log
这里咱们没有任何谬误音讯,正如预期的那样。
值得注意的是,咱们的 Lua 模块是在这第一个申请中加载的,后续的申请只是应用内存中缓存的 Lua 模块。
为了防止第一次申请的额定开销,咱们能够在服务器启动时预加载 Lua 模块。
要做到这一点,咱们须要编辑一下 nginx.conf
文件。
vim conf/nginx.conf
在 http {}
块里,咱们增加一个 init_by_lua_block
指令。在那个上下文中,咱们加载咱们的 Lua 模块。
http {
init_by_lua_block {require "hello"}
...
init_by_lua_block
运行在 OpenResty 服务器启动的时候。
测试一下配置是否正确。
nginx -p $PWD/ -t
没有问题。
当初咱们通过向 nginx 主过程发送 HUP
信号来从新加载服务器。
Now we reload the server by sending the HUP
signal to the nginx master process.
kill -HUP `cat logs/nginx.pid`
主过程的过程 ID 存储在这个 nginx.pid
文件中。
再次发送 HTTP 申请。
curl 'http://127.0.0.1:8080/'
同样的行为,只是这次快了一点点。
如果你喜爱这个教程,请订阅这个博客网站和咱们的 YouTube 频道 或 B 站频道。谢谢!
对于本文和关联视频
本文和相关联的视频都是齐全由咱们的 OpenResty Demo 零碎从一个极简略的剧本文件主动生成的。
对于作者
章亦春是开源我的项目 OpenResty® 的创始人,同时也是 OpenResty Inc. 公司的创始人和 CEO。他奉献了许多 Nginx 的第三方模块,相当多 Nginx 和 LuaJIT 外围补丁,并且设计了 OpenResty XRay 等产品。
关注咱们
如果您喜爱本文,欢送关注咱们 OpenResty Inc. 公司的博客网站。也欢送扫码关注咱们的微信公众号:
翻译
咱们提供了英文版原文和中译版(本文)。咱们也欢送读者提供其余语言的翻译版本,只有是全文翻译不带省略,咱们都将会思考采纳,非常感谢!