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

openresty(nginx+lua)初识的更多相关文章

  1. OpenResty(nginx+lua) 入门

    OpenResty 官网:http://openresty.org/ OpenResty 是一个nginx和它的各种三方模块的一个打包而成的软件平台.最重要的一点是它将lua/luajit打包了进来, ...

  2. (转)OpenResty(nginx+lua) 开发入门

    原文:https://blog.csdn.net/enweitech/article/details/78519398 OpenResty 官网:http://openresty.org/  Open ...

  3. CentOS安装OpenResty(Nginx+Lua)开发环境

    一.简介 OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发.扩展性极高 ...

  4. 【原创】大叔问题定位分享(36)openresty(nginx+lua)中获取不到post数据,ngx.req.get_body_data返回nil

    openresty(nginx+lua)中获取不到post数据,ngx.req.get_body_data返回nil This function returns nil if the request ...

  5. 搭建OpenResty(Nginx+Lua)

    这篇文章是一个多月前写的,当时之所以搭建这个是为了最大程度上发挥Nginx的高并发效率(主要是结合lua脚本),参考的话,主要参考张开涛先生写的跟开涛学Nginx+lua系列文章,地址为:https: ...

  6. OpenResty(Nginx+Lua)开发入门

    Nginx入门 本文目的是学习Nginx+Lua开发,对于Nginx基本知识可以参考如下文章: nginx启动.关闭.重启 http://www.cnblogs.com/derekchen/archi ...

  7. 跟我学OpenResty(Nginx+Lua)开发目录贴 (转)

    使用Nginx+Lua开发近一年的时间,学习和实践了一些Nginx+Lua开发的架构,为了让更多人使用Nginx+Lua架构开发,利用春节期间总结了一份基本的学习教程,希望对大家有用.也欢迎谈探讨学习 ...

  8. 【原创】运维基础之OpenResty(Nginx+Lua)+Kafka

    使用docker部署 1 下载 # wget https://github.com/doujiang24/lua-resty-kafka/archive/v0.06.tar.gz# tar xvf v ...

  9. OpenResty(Nginx)+Lua+GraphicsMagick实现缩略图功能

    http://www.hopesoft.org/blog/?p=1188 http://www.imagemagick.org/download/ 2.用法 原始图片是input.jpg,尺寸:160 ...

  10. OpenResty部署nginx及nginx+lua

    因为用nginx+lua去开发,所以会选择用最流行的开源方案,就是用OpenResty nginx+lua打包在一起,而且提供了包括redis客户端,mysql客户端,http客户端在内的大量的组件 ...

随机推荐

  1. 前端面试基础题:Ajax原理

    Ajax 的原理简单来说是在⽤户和服务器之间加了—个中间层( AJAX 引擎),通过XmlHttpRequest 对象来向服务器发异步请求,从服务器获得数据,然后⽤ javascrip t 来操作 D ...

  2. ACL权限管理 学习

    #查看权限 getfacl 文件名 例子:getfacl test 结果:# file: test# owner: root# group: rootuser::rw-group::r-xother: ...

  3. centos 8 安装和网络配置

    centos 8 系统安装 系统安装步骤 启动服务器之后选择 Install CentOs Linux 8 选择语言然后下一步 配置 磁盘(Installation Destir) 这里选择默认配置 ...

  4. Spring IOC 启动过程

    1. 引言 本篇博文主要介绍 IOC 容器的启动过程,启动过程分为两个步骤,第一个阶段是容器的启动阶段,第二个阶段是 Bean 实例化阶段,这两个阶段各自需要执行的步骤如下图,接下来会一一介绍. 需要 ...

  5. Java中编写代码出现异常,如何抛出异常,如何捕获异常

    异常的产生过程解析 先运行下面的程序,程序会产生一个数组索引越界异常ArrayIndexOfBoundsException.我们通过图解来解析下异常产生的过程. 工具类 class ArrayTool ...

  6. C#LeetCode刷题之#9-回文数(Palindrome Number)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3840 访问. 判断一个整数是否是回文数.回文数是指正序(从左向右 ...

  7. homekit_四路继电器

    这款继电器使用苹果手机进行控制,有普通版本和点动版本可供选择,有兴趣的可以去以下链接购买: https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-1 ...

  8. BLE MESH 学习[1] - ESP32 篇

    BLE MESH 学习 BLE MESH 是一种蓝牙(n:m)组网的技术. 本篇先介绍 BLE MESH 到使用 ESP32 的官方示例对其进行学习讲解. 后面会进一步学习 SIG 的 BLE MES ...

  9. Who Am I? Personality Detection based on Deep Learning for Texts 阅读笔记

    文章目录 源代码github地址 摘要 2CLSTM 过程 1. 词嵌入 2. 2LSTM处理 3. CNN学习LSGCNN学习LSG 4. Softmax分类 源代码github地址 https:/ ...

  10. Kruscal算法求图的最小生成树

    Kruscal算法求图的最小生成树 概述   和Prim算法求图的最小生成树一样,Kruscal算法求最小生成树也用到了贪心的思想,只不过前者是贪心地选择点,后者是贪心地选择边.而且在算法的实现中,我 ...