openresty(nginx+lua)初识
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)初识的更多相关文章
- OpenResty(nginx+lua) 入门
OpenResty 官网:http://openresty.org/ OpenResty 是一个nginx和它的各种三方模块的一个打包而成的软件平台.最重要的一点是它将lua/luajit打包了进来, ...
- (转)OpenResty(nginx+lua) 开发入门
原文:https://blog.csdn.net/enweitech/article/details/78519398 OpenResty 官网:http://openresty.org/ Open ...
- CentOS安装OpenResty(Nginx+Lua)开发环境
一.简介 OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发.扩展性极高 ...
- 【原创】大叔问题定位分享(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 ...
- 搭建OpenResty(Nginx+Lua)
这篇文章是一个多月前写的,当时之所以搭建这个是为了最大程度上发挥Nginx的高并发效率(主要是结合lua脚本),参考的话,主要参考张开涛先生写的跟开涛学Nginx+lua系列文章,地址为:https: ...
- OpenResty(Nginx+Lua)开发入门
Nginx入门 本文目的是学习Nginx+Lua开发,对于Nginx基本知识可以参考如下文章: nginx启动.关闭.重启 http://www.cnblogs.com/derekchen/archi ...
- 跟我学OpenResty(Nginx+Lua)开发目录贴 (转)
使用Nginx+Lua开发近一年的时间,学习和实践了一些Nginx+Lua开发的架构,为了让更多人使用Nginx+Lua架构开发,利用春节期间总结了一份基本的学习教程,希望对大家有用.也欢迎谈探讨学习 ...
- 【原创】运维基础之OpenResty(Nginx+Lua)+Kafka
使用docker部署 1 下载 # wget https://github.com/doujiang24/lua-resty-kafka/archive/v0.06.tar.gz# tar xvf v ...
- OpenResty(Nginx)+Lua+GraphicsMagick实现缩略图功能
http://www.hopesoft.org/blog/?p=1188 http://www.imagemagick.org/download/ 2.用法 原始图片是input.jpg,尺寸:160 ...
- OpenResty部署nginx及nginx+lua
因为用nginx+lua去开发,所以会选择用最流行的开源方案,就是用OpenResty nginx+lua打包在一起,而且提供了包括redis客户端,mysql客户端,http客户端在内的大量的组件 ...
随机推荐
- 解决Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no jogl in java.library.path问题
首先要把jonl.jar和gluegen.jar导入到eclipse中,然后把解压后的4个.dll文件也导入到eclipse中 具体操作: jonl文件下载地址 链接:https://pan.baid ...
- 准确率、精确率、召回率、F1
在搭建一个AI模型或者是机器学习模型的时候怎么去评估模型,比如我们前期讲的利用朴素贝叶斯算法做的垃圾邮件分类算法,我们如何取评估它.我们需要一套完整的评估方法对我们的模型进行正确的评估,如果模型效果比 ...
- 2020-06-14:Redis怎么实现分布式锁?
福哥答案2020-06-14: 1.SETNX+EXPIRE.非原子性.2.SET key value [EX seconds] [PX milliseconds] [NX|XX]EX second ...
- 熵权法原理及matlab代码实现
参考原理博客地址https://blog.csdn.net/u013713294/article/details/53407087 一.基本原理 在信息论中,熵是对不确定性的一种度量.信息量越大,不确 ...
- Python 为什么要在 18 年前引入布尔类型?且与 C、C++ 和 Java 都不同?
花下猫语:在上一篇<Python 为什么能支持任意的真值判断? >文章中,我们分析了 Python 在真值判断时的底层实现,可以看出 Python 在对待布尔值时,采用了比较宽泛的态度.官 ...
- 喵的Unity游戏开发之路 - 推球:游戏中的物理
很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本文不 ...
- 国人开源了一款超好用的 Redis 客户端,真香!!
大家都知道,Redis Desktop Manager 是一款非常好用的 Redis 可视化客户端工具,但可惜的是 v0.9.4 版本之后需要收费了: 这个工具不再免费提供安装包了,要对所有安装包收费 ...
- Airtest操作多台云手机,进行分发,多个脚本后端调度
一.核心重点 使用python后端框架:tornado 调度:redis队列 存手机的class_name采取头取尾曾 多台手机连接方式 connect_device(f"Android:/ ...
- hdu.2042 超级楼梯
这种递归来写,除了递归我也想不到怎么写了 AC代码: #include<iostream>using namespace std;int x[41];//打表,不打表我不用想就知道过不了, ...
- 《p5.js创意游戏编程》第一课:跳动的小球
准备:Hbuilder/vscode等可以编写网页的编辑器 如果想立刻上手也可以使用在线编译器p5.js官方在线编辑器,如果打不开也可以使用国内的一款在线编辑器jsrun编辑器,(第一课先使用jsru ...