OpenResty入门小demo,OpenResty入门demo
OpenResty入门小demo,OpenResty入门demo
1.掌握openresty启动、停止、重新加载配置等命令
启动:ydjr01:/home/www #
/usr/local/openresty/nginx/sbin/nginx -p `pwd` -c conf/nginx.conf -s reload
其中:-t 是检验是否有错
-s reload是重启,如果没有就是第一次启动。更改配置后要重启。
-s stop是停止
/usr/local/openresty/nginx/sbin/nginx –t 测试是否正常,简单的错误可以测出来
2.通过定义9080端口虚拟主机,访问/hello路径时,返回hello world字符串
查看相关日志记录
ydjr01:/home/www #
curl http://85.18.13.131:9080/hello
日志记录:
另法:把lua代码放到lua文件夹中。(现在是这种)
3.在2基础上,访问/get_param路径时,以key-value格式在页面打印url中带的参数
例如 ip:port:9080/get_param?name=aaa&age=12&xxx=xxx,页面打印
name - aaa
age - 12
xxx - xxx
location /get_param { content_by_lua_block{ local arg = ngx.req.get_uri_args() for k, v in pairs(arg) do ngx.say(k .. "-" ..v) end } } |
curl 'http://85.18.13.131:9080/get_param?name=aaa&age=12&gender=female'
Q:为什么输出顺序和输入不一样?
A:只要获取所需信息就可以了,顺序不重要,如果想获取顺序的话,可以实现排序。
4.在3基础上,访问/post_param路径时,打印请求包体中的所有参数
在linux使用curl命令模拟post访问
location /post_param{ content_by_lua_block{ ngx.reg.read_body() local arg= ngx.req.get_post_args() for k,v in pairs(arg) do ngx.say(k, "-", v) end } }
|
注意:content_by_lua_block{}里相当于是.lua文件,注释不能使用#,要用- -。
Q:为什么写在两个文件里就出错?
A:两个.conf里不能都是localhost
5.在4基础上,访问/post_param时请求包体参数使用Json,打印解析后的json数据
location /post_param{ content_by_lua_block{ local cjson = require "cjson.safe"
local jsondata = ngx.req.get_body_data() local aaa = ngx.req.get_post_args() for k,v in pairs(aaa) do ngx.say(k,v) end
local json = cjson.decode(jsondata) for k,v in pairs(json) do ngx.say(k, v) end
local table = {} table.code = "200" table.msg = "success" local str1 = cjson.encode(table) ngx.say(str1)
local jsonobj = cjson.decode(str1) ngx.say(type(jsonobj)) for k,v in pairs(jsonobj) do ngx.say(k, "-", v) end
} }
|
Ok_code:
location /post_param{ content_by_lua_block{ local cjson = require "cjson.safe" local jsondata = ngx.req.get_body_data() local json = cjson.decode(jsondata) for k,v in pairs(json) do ngx.say(k, "-", v) end } } |
curl 'localhost:9080/post_param' -d '{"status":"success","result":"hello"}'
6.在5基础上,访问/get_redis?key=aaa时,页面打印redis库中key的value
(1)HttpRedis2Module访问方法:
location /get_redis{ set_unescape_uri $key $arg_key; redis2_query get $key; redis2_pass 127.0.0.1:6379; } } |
其中,$3是返回的数据长度。
(2)lua-resty-redis访问方法
location /get_redis{ content_by_lua_block{ local redis = require "resty.redis" local cjson = require "cjson.safe"
local arg = ngx.req.get_uri_args() for k, v in pairs(arg) do key=v end
local red = redis:new()
red :set_timeout(1000)
local ok, err = red:connect("127.0.0.1", 6379) if not ok then ngx.say("failed to connect:", err) return end
local res,err = red:get(key) ngx.say(res) red:close() } } |
7.在6基础上:
访问/set?key=value时,将key-value存入redis库,页面返回json格式报文{"code":"0", msg:"success"}
location /set{ content_by_lua_block{ local redis = require "resty.redis" local cjson = require "cjson.safe"
local arg = ngx.req.get_uri_args() for k, v in pairs(arg) do key=k value=v end
local red = redis:new()
red :set_timeout(1000)
local ok, err = red:connect("127.0.0.1", 6379) if not ok then ngx.say("failed to connect:", err) return end
local ans,err = red:set(key,value) if not ans then ngx.say("failed to run sort:", err) return else local table = {} table.code = "0" table.msg = "success" local str1 = cjson.encode(table) ngx.say(str1) end
red:close() } } |
访问/get?key=aaa时,查询aaa对应value值,页面返回json格式报文{"code":"0", "msg":"aaa对应value"}
location /get_redis{ content_by_lua_block{ local redis = require "resty.redis" local cjson = require "cjson.safe"
local red = redis:new()
red :set_timeout(1000)
local ok, err = red:connect("127.0.0.1", 6379) if not ok then ngx.say("failed to connect:", err) return end
local res,err = red:get("aaa")
local table = {} table.code = "0" table.msg = res local str1 = cjson.encode(table) ngx.say(str1)
red:close() } } |
访问/del?key=aaa时,删除aaa键值,页面返回json格式报文{"code":"0", "msg":"success"}
当key不存在时,有相应报错信息
location /del{ content_by_lua_block{ local redis = require "resty.redis" local cjson = require "cjson.safe"
local arg = ngx.req.get_uri_args() for k, v in pairs(arg) do key=v end
local red = redis:new()
red :set_timeout(1000)
local ok, err = red:connect("127.0.0.1", 6379) if not ok then ngx.say("failed to connect:", err) return end
local ans,err = red:del(key) if not ans then ngx.say("failed to run sort:", err) return else local table = {} table.code = "0" table.msg = "success" local str1 = cjson.encode(table) ngx.say(str1) end
red:close() } } |
评论暂时关闭