1、新增项目配置文件:

vim /usr/example/example1.conf

--将以下内容加入example1.conf
server {
listen 80;
server_name _;
     #~ 表示匹配所有请求路径
     #(\d+)/(\d+) 正则匹配
location ~ /lua_request/(\d+)/(\d+) {
#设置nginx变量
set $a $1;
set $b $host;
default_type "text/html";
#nginx内容处理
content_by_lua_file /usr/example/lua/lua_request.lua;
#内容体处理完成后调用
echo_after_body "ngx.var.b $b";
}
}

2、编写lua脚本(获取http请求信息)

vim /usr/example/lua/lua_request.lua

--将以下内容加入lua_request.lua

--nginx变量
--ngx.var nginx变量,如对变量ngx.var.b = 2赋值,需要提前声明。
--nginx location中使用正则捕获数组,所以可以使用ngx.var[index]获取,index:索引值,此索引值默认从1开始
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>") --请求头
--get_headers() 获取请求头,默认获取请求头的前100位,也可以使用get_headers(0)获取所有
local headers = ngx.req.get_headers()
ngx.say("headers begin","</br>")
--headers["请求头中的key值"]
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>")
--get_uri_args() 获取请求参数
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请求参数
--read_body() 读取请求体;也可在nginx中配置 lua_need_request_body on; 不推荐此种配置方式
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>") --请求http协议版本
ngx.say("ngx.req.http_version :",ngx.req.http_version(),"</br>")
--请求方法
ngx.say("ngx.req.get_method : ", ngx.req.get_method(), "<br/>")
--未解析的请求头字符串
ngx.say("ngx.req.raw_header:",ngx.req.raw_header(),"</br>")
--未解析的body内容
ngx.say("ngx.req.get_body_dat :",ngx.req.get_body_data(),"</br>")
ngx.say("</br>")

3、检查配置文件是否正确

./sbin/nginx -t

4、重启openresty

 sudo /sbin/service openresty stop

 sudo /sbin/service openresty start

5、测试:

浏览器访问:http://127.0.0.1/lll/lua_request/1/5/2?a=3&b=4

由于通过浏览器请求方式为get方式 ,所以post处没有打印出有效信息。

6、其他API

--重定向
ngx.redirect("http://www.baidu.com", 302)
--未解码的uri
ngx.var.request_uri
--解码
ngx.unescape_uri(request_uri)
--MD5加密
ngx.md5("44444444")
-- uri编码解码
ngx.escape_uri/ngx.unescape_uri
--参数编码解码
ngx.encode_args/ngx.decode_args
--BASE64编码解码
ngx.encode_base64/ngx.decode_base64
--nginx正则表达式匹配
ngx.re.match

 更多nginx  http api : http://wiki.nginx.org/HttpLuaModule#Nginx_API_for_Lua

 文章参考自 :http://jinnianshilongnian.iteye.com/blog/2186448

最新文章

  1. ES6之let命令详解
  2. Android6.0运行时权限管理
  3. 图文混排--CoreText的简单运用
  4. delphi 相对路径
  5. MMORGP大型游戏设计与开发(客户端架构 part1 of vgui)
  6. php 数组排序 sort asort ksort
  7. codeforces D. Queue 找规律+递推
  8. c# abstract抽象类与继承类子类的构造函数_base
  9. mysql数据库备份及恢复命令mysqldump,source的用法
  10. sap 三代出口(BADI)的查找方法
  11. xHtml+css学习笔记
  12. 虚拟机如何访问tomcat
  13. Java中的 修饰符
  14. Java内存泄漏分析与解决方案
  15. 【转】Appium测试安卓Launcher以滑动窗体获得目标应用
  16. C# 读取 Excel 最全最稳定的方式
  17. 手机连接fiddler之后,安装证书的方法
  18. 【转】Servlet 生命周期、工作原理
  19. Android学习之基础知识五—Android常用的七大控件
  20. Linux 下安装 MATLAB

热门文章

  1. python6.2类的封装
  2. String 的两种实例化方式
  3. CSS3 新添选择器
  4. 初识HTML(二)
  5. Ubuntu 18.04 安装配置 go 语言
  6. Android TextView 字数过多,用跑马灯滚动形式实现
  7. java中assert的使用
  8. 什么是servlet(转)
  9. .Net Core3.1 + EF Core + LayUI 封装的MVC版后台管理系统
  10. 第4章 DDL数据定义