1 hello world
openresty1.9.3.1及以下版本,请使用content_by_lua命令;在 openresty1.9.3.2以上,content_by_lua 改成了 content_by_lua_block。可使用 nginx -V 命令查看版本号
方法一:
修改openresty中nginx配置文件nginx.conf:
location / {
#root html;
#index index.html index.htm;
default_type text/html;
content_by_lua_block {
ngx.say("hello world");
}
}
重启openresty
方法二:
使用content_by_lua_file 来引入一个lua文件
修改openresty中nginx配置文件nginx.conf:
location / {
#root html;
#index index.html index.htm;
default_type text/html;
content_by_lua_file /home/luafile/my.lua;
}
新建my.lua,代码如下:
ngx.say("hello world");
2 获取http请求信息
2.1 获取uri参数
获取一个 uri 有两个方法:ngx.req.get_uri_args、ngx.req.get_post_args,二者主要的区别是参数来源有区别,其中ngx.req.get_uri_args为获取get请求,ngx.req.get_post_args为获取post请求。
编写lua脚本geturl.lua:
-- 获取get请求参数
local arg = ngx.req.get_uri_args()
for k,v in pairs(arg) do
ngx.say("[GET ] key:", k, " v:", v)
ngx.say("<br>")
end
-- 获取post请求时 请求参数
ngx.req.read_body() -- 解析 body 参数之前一定要先读取 body
local arg = ngx.req.get_post_args()
for k,v in pairs(arg) do
ngx.say("[POST] key:", k, " v:", v)
ngx.say("<br>")
end
修改openresty中nginx配置文件nginx.conf:
location / {
# root html;
# index index.html index.htm;
default_type text/html;
content_by_lua_file /home/luafile/geturl.lua;
}
测试get请求:
测试post请求:
2 获取header
编写getheader.lua脚本:
-- 获取header
local headers = ngx.req.get_headers()
for k,v in pairs(headers) do
ngx.say("[header] name:", k, " v:", v)
ngx.say("<br>")
end
修改openresty中nginx配置文件nginx.conf:
location / {
# root html;
# index index.html index.htm;
default_type text/html;
content_by_lua_file /home/luafile/getheader.lua;
}
测试结果如下:
3 获取body
编写getbody.lua脚本:
-- 获取body信息
ngx.req.read_body()
local data = ngx.req.get_body_data()
ngx.say(data)
ngx.req.get_body_data() 读请求体,会偶尔出现读取不到直接返回 nil 的情况。如果请求体尚未被读取,请先调用 ngx.req.read_body (或打开 lua_need_request_body 选项强制本模块读取请求体,此方法不推荐)。
修改openresty中nginx配置文件nginx.conf:
location / {
# root html;
# index index.html index.htm;
default_type text/html;
content_by_lua_file /home/luafile/getbody.lua;
}
测试结果如下:
3 操作redis
编写redis.lua脚本:
local redis = require "resty.redis"
local red = redis:new()
red:set_timeout(1000) -- 1 sec
local ok, err = red:connect("192.168.222.134", 6379)
if not ok then
ngx.say("failed to connect: ", err)
return
end
-- 请注意这里 auth 的调用过程
local count
count, err = red:get_reused_times()
if 0 == count then
ok, err = red:auth("123456")
if not ok then
ngx.say("failed to auth: ", err)
return
end
elseif err then
ngx.say("failed to get reused times: ", err)
return
end
ok, err = red:set("blogger", "very handsome")
if not ok then
ngx.say("failed to set itcast: ", err)
return
end
ngx.say("set result: ", ok)
-- 连接池大小是100个,并且设置最大的空闲时间是 10 秒
local ok, err = red:set_keepalive(10000, 100)
if not ok then
ngx.say("failed to set keepalive: ", err)
return
end
修改openresty中nginx配置文件nginx.conf:
location / {
# root html;
# index index.html index.htm;
default_type text/html;
content_by_lua_file /home/luafile/redis.lua;
}
测试:
查看redis: