前面两篇文章中介绍了 openresty 的安装和一个最基本的程序的编写,本篇文章来具体介绍下openresty提供的一些api,通过这些api我们可以非常方便的进行nginx的扩展。
OpenResty提供了很多的API,我在学习这些API的时候也是走了很多的弯路。
1.不知道有哪些api,到处百度收罗了一些api
2.去官网没有找到任何的资料,通过之前同事所写的openresty插件,来学习常用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。