openresty 常用api

前面两篇文章中介绍了 openresty 的安装和一个最基本的程序的编写,本篇文章来具体介绍下openresty提供的一些api,通过这些api我们可以非常方便的进行nginx的扩展。

OpenResty提供了很多的API,我在学习这些API的时候也是走了很多的弯路。

1.不知道有哪些api,到处百度收罗了一些api

2.去官网没有找到任何的资料,通过之前同事所写的openresty插件,来学习常用api

自从掌握了科学上网的方式之后,才打开了新的世界的大门,https://github.com/openresty/lua-nginx-module#nginx-api-for-lua 这里有非常详细的api的说明。

官方给我们提供了很多api,为了快速上手,我这里罗列出几个常用的。这些api非常的重要,不管在是OpenResty中开发还是后面开发Kong(一个基于OpenResty的网关)的插件,这些API都非常的实用。

获取参数

1 获取get方式传入的url参数

location /lua_api_params {
     default_type 'text/html';
     content_by_lua_block {
         local arg = ngx.req.get_uri_args();
         for k,v in pairs(arg) do
             ngx.say("key:",k," val:",v);
         end;
     }
}
2.获取post方式传入的body参数
location /lua_api_body {
    default_type 'text/html';
    content_by_lua_block {
        ngx.req.read_body();
        local arg = ngx.req.get_post_args();
        for k,v in pairs(arg) do
            ngx.say("key:",k," val:",v);
        end;
    }
}

# 3.获取请求头的数据

location /lua_api_head {
        default_type 'text/html';
        content_by_lua_block {
                local head = ngx.req.get_headers();
                local method = ngx.req.get_method();
                ngx.say("request method is :", method, "<br/>");
                for k,v in pairs(head) do
                        ngx.say(k,": ",v,"<br>");
                end;
        }
}
修改请求数据
有些情况下,我们需要对客户端的原始请求数据进行处理之后,再转发到代理的upstream。这个时候就可以在openresty中来完成。
1、修改请求URI中的参数
ngx.req.set_uri_args("a=3&b=4");

修改参数非常简单,通过这么一行代码就可以了,那么你所代理的后台服务接收到的URI的参数就是在这里所指定的。

2、修改Body中的数据

ngx.req.set_body_data("this is content");

修改请求体的方式有很多种,通过set_body_data是其中的一种。因为在nginx中,请求数据并不是一次性接收完成的,因此我们在修改的时候,很多情况下可能需要在后面做拼接或者做一些拦截,这个方法就无法满足了。

具体的操作可以参考 https://github.com/openresty/lua-nginx-module#nginx-api-for-lua

输出响应

# 多个参数拼接使用 ,

ngx.say("hello world");
local name = "xiaoming";
ngx.say("hello ", name);

日志输出

ngx.log(ngx.ERR, "这是一条错误日志");

日志级别

ngx.STDERR — 标准输出

ngx.EMERG — 紧急报错

ngx.ALERT — 报警

ngx.CRIT — 严重,系统故障,触发运维告警系统

ngx.ERR — 错误,业务不可恢复性错误

ngx.WARN — 告警,业务中可忽略错误

ngx.NOTICE — 提醒,业务比较重要信息

ngx.INFO — 信息,业务琐碎日志信息,包含不同情况判断等

ngx.DEBUG — 调试

关于nginx的常用api就到这里,通过这些api就可以获取到用户请求的参数,并通过lua脚本对参数进行处理,并能够给客户端响应。后续我来带大家看下如果通过lua来连接redis。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值