OpenResty应用


1. OpenResty 命令详解

openresty -h | -?

含义:查看OpenResty的帮助,可以得知当前的版本号以及全部指令的使用方式。
在这里插入图片描述

openresty -v

含义:查看当前OpenResty的版本
在这里插入图片描述

openresty -V

含义:查看当前OpenResty的编译信息
在这里插入图片描述

openresty -t | -T

含义:检查当前nginx.conf文件的语法错误。运行这个命令只是去检查语法并不会去启动OpenResty。
在这里插入图片描述

openresty -s 信号

含义:使用”-s”选项,会主动想openrest的master进程发送信号,可以通过信号的类型来执行不同的操作。
在这里插入图片描述

2. Lua基础功能使用

2.1 hello world

①创建 helloworld.lua

ngx.say("你好世界!");

在这里插入图片描述

②修改 nginx.conf

server{
        listen 80;
        server_name 192.168.80.16;

        location /helloworld {
           content_by_lua_file /softwares/openresty/script/helloworld.lua;
        }
}

在这里插入图片描述

③重启nginx访问192.168.80.16/helloworld
会自动下载一个文件,打开就是:你好世界!
在这里插入图片描述
在这里插入图片描述

2.2 获取请求 uri 参数

获取url参数 ngx.var.arg_xxngx.req.get_uri_args[“xx”]两者都是为了获取请求url中的参数.

①修改nginx.conf

location /print_param {
    content_by_lua_block {
        local arg = ngx.req.get_uri_args()
            for k,v in pairs(arg) do
            ngx.say("[GET ] key:", k, " v:", v)
            end

            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)
            end
    }
}

②重启nginx然后在shell端发起请求

curl '127.0.0.1/print_param?a=1&b=2%26' -d 'c=3&d=4%26'

在这里插入图片描述
​ 从这个例子中,我们可以很明显看到两个函数 ngx.req.get_uri_argsngx.req.get_post_args 获取数据来源是有明显区别的,前者来自 uri 请求参数,而后者来自 post 请求内容。

2.3 传递请求 uri 参数

当我们可以获取到请求参数,自然是需要这些参数来完成业务控制目的。大家都知道,URI 内容传递过程中是需要调用 ngx.encode_args 进行规则转义。

①修改nginx.conf

location /test {
    content_by_lua_block {
        local res = ngx.location.capture(
            '/print_param',
            {
            method = ngx.HTTP_POST,
                args = ngx.encode_args({a = 1, b = '2&'}),
                body = ngx.encode_args({c = 3, d = '4&'})
        }
        )
            ngx.say(res.body)
    }
}

②重启nginx,并执行

curl '127.0.0.1/test'

在这里插入图片描述

2.4 获取请求类型

①修改nginx.conf

location /lua_request{
    default_type 'text/html';
    lua_code_cache off;
    content_by_lua_file  /usr/example/lua/lua_request.lua;
}

②创建 /usr/example/lua/lua_request.lua

local arg = ngx.req.get_uri_args()
for k,v in pairs(arg) do
   ngx.say("[GET ] key:", k, " v:", v)
end

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

在上述例子中有以下的api

  • ngx.req.get_uri_args 获取在uri上的get类型参数,返回的是一个table类型的数据结构。
  • ngx.req.read_body 读取body,这在解析body之前,一定要先读取body。
  • ngx.req.get_post_args 获取form表单类型的参数,返回结果是一个table类型的数据。

③重启nginx,并执行

curl ‘http://192.168.80.16/lua_request?a=323&b=ss’ -d ‘c=12w&d=2se3’

在这里插入图片描述


文章作者: fFee-ops
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 fFee-ops !
评论
  目录