Lua入门
本文目的是学习Nginx+Lua开发,对于Lua基本知识可以参考如下文章:
Lua简明教程
http://coolshell.cn/articles/10739.html
lua在线lua学习教程
Lua 5.1 参考手册
http://www.codingnow.com/2000/download/lua_manual.html
Lua5.3 参考手册
http://cloudwu.github.io/lua53doc/
Nginx Lua API
和一般的Web Server类似,我们需要接收请求、处理并输出响应。而对于请求我们需要获取如请求参数、请求头、Body体等信息;而对于处理就是调用相应的Lua代码即可;输出响应需要进行响应状态码、响应头和响应内容体的输出。因此我们从如上几个点出发即可。
接收请求
1、example.conf配置文件
- location ~ /lua_request/(\d+)/(\d+) {
- #设置nginx变量
- set $a $1;
- set $b $host;
- default_type "text/html";
- #nginx内容处理
- content_by_lua_file /usr/example/lua/test_request.lua;
- #内容体处理完成后调用
- echo_after_body "ngx.var.b $b";
- }
2、test_request.lua
- --nginx变量
- local var = ngx.var
- ngx.say("ngx.var.a : ", var.a, "<br/>")
- ngx.say("ngx.var.b : ", var.b, "<br/>")
- ngx.say("ngx.var[2] : ", var[2], "<br/>")
- ngx.var.b = 2;
- ngx.say("<br/>")
- --请求头
- local headers = ngx.req.get_headers()
- ngx.say("headers begin", "<br/>")
- ngx.say("Host : ", headers["Host"], "<br/>")
- ngx.say("user-agent : ", headers["user-agent"], "<br/>")
- ngx.say("user-agent : ", headers.user_agent, "<br/>")
- for k,v in pairs(headers) do
- if type(v) == "table" then
- ngx.say(k, " : ", table.concat(v, ","), "<br/>")
- else
- ngx.say(k, " : ", v, "<br/>")
- end
- end
- ngx.say("headers end", "<br/>")
- ngx.say("<br/>")
- --get请求uri参数
- ngx.say("uri args begin", "<br/>")
- local uri_args = ngx.req.get_uri_args()
- for k, v in pairs(uri_args) do
- if type(v) == "table" then
- ngx.say(k, " : ", table.concat(v, ", "), "<br/>")
- else
- ngx.say(k, ": ", v, "<br/>")
- end
- end
- ngx.say("uri args end", "<br/>")
- ngx.say("<br/>")
- --post请求参数
- ngx.req.read_body()
- ngx.say("post args begin", "<br/>")
- local post_args = ngx.req.get_post_args()
- for k, v in pairs(post_args) do
- if type(v) == "table" then
- ngx.say(k, " : ", table.concat(v, ", "), "<br/>")
- else
- ngx.say(k, ": ", v, "<br/>")
- end
- end
- ngx.say("post args end", "<br/>")
- ngx.say("<br/>"