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库中keyvalue

(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()

              }    

       }    

 

 

相关内容

    暂无相关文章