1.OpenResy简介和安装

OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

简单地说OpenResty 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。

使用docker 创建实例

docker run -d --name="openresty-nginx" -p 8088:80 openresty/openresty

访问http://localhost:8088/

2.动态输出

首先看一下openresty安装目录下的nginx中的配置文件,如果有下面这一行:

include /etc/nginx/conf.d/*.conf

那就要先修改/etc/nginx/conf.d目录下的default.conf文件:

vim default.conf

在server中新增以下代码:

location /hello {default_type text/html;content_by_lua 'ngx.say("<p>hello, openresty</p>")';
}

docker容器中安装vim:

apt-get update
apt-get install vim

然后重新加载nginx

nginx -s reload

并访问http://localhost:8088/hello,得到:

可以看到使用lua输出的内容成功显示。

3.lua文件输出内容

上面的代码直接把lua代码写到nginx配置里面了,维护起来不是很方便,我们把它拿出来一个单独的文件,并放到nginx目录下面单独的lua目录下,方便管理。

首先在/usr/local/openresty/nginx下新建一个lua目录,然后创建一个hello.lua文件,文件内容为:

ngx.say("<p>hello, nginx_lua</p>")

然后修改/etc/nginx/conf.d/default.conf:

location /hello {default_type text/html;content_by_lua_file /usr/local/openresty/nginx/lua/hello.lua
}

再重新加载一下nginx,访问http://localhost:8088/hello,得到:

说明通过lua文件输出的内容也成功显示。

但是我们发现还有一个问题,如果想要处理很多个请求,那不是要在nginx里面配置N个location吗,我们肯定不会这么做,这里可以通过nginx动态匹配指定lua文件名。nginx配置文件default.conf修改一下:

location ~ /lua/(.+) {content_by_lua_file /usr/local/openresty/nginx/lua/$1.lua;
}

这个时候访问http://localhost:8088/lua/hello可以得到:

lua后面的路径就是刚刚创建的hello.lua文件名。

然后我们在/usr/local/openresty/nginx/lua目录下新建一个goodbye.lua文件,内容为:

ngx.say("<p>goodbye, nginx_lua</p>")

这时访问http://localhost:8088/lua/goodbye可以得到:

4.接收参数

首先创建一个req.lua文件,内容如下:

local _M = {}
-- 获取http get/post 请求参数
function _M.getArgs()-- 获取http请求方式 GET or POSTlocal request_method = ngx.var.request_method-- 这里是一个table,包含所有get请求参数local args = ngx.req.get_uri_args()if "POST" == request_method then-- 先读取请求体ngx.req.read_body()-- 这里也是一个table,包含所有post请求参数local postArgs = ngx.req.get_post_args()if postArgs thenfor k, v in pairs(postArgs) doargs[k] = vendendendreturn args
end
return _M

然后先要在nginx.conf配置文件中的http部分加入 lua_package_path 的配置,也就是配置lua脚本的访问目录,还要注意一下格式:

lua_package_path "/usr/local/openresty/nginx/lua/?.lua;;";

再创建一个result.lua文件,内容如下:

-- 引入req模块
local req = require("req")
-- 获取请求参数列表
local args = req.getArgs()
-- 获取key为name的值
local name = args['name']
-- 如果不存在指定默认值
if name == nil or name == "" thenname = "nobody"
end
-- 输出结果
ngx.say("<p>hello " .. name .. "!</p>")

重新加载一下nginx,访问 http://localhost:8088/lua/result?name=xp,得到:

再访问一下http://localhost:8088/lua/result?name=openresty,得到:

可以看到成功解析参数。


参考:

http://www.itcast.cn/news/20200315/16130698949.shtml

https://wiki.jikexueyuan.com/project/openresty/

OpenResty 入门教程相关推荐

  1. OpenResty入门教程

    1.OpenResty简介 2.OpenResty的安装(联网,这里我在Centos7中安装) 1)安装OpenResty的依赖开发库 yum install -y pcre-devel openss ...

  2. openresty及lor入门教程

    openresty及lor入门教程 一.开发环境准备 1.openresty安装 2.eclipse安装lua插件 3.环境配置说明 二.Lor框架基本使用 1.分配置文件dev.conf介绍 2.m ...

  3. Kafka入门教程与详解

    1 Kafka入门教程 1.1 消息队列(Message Queue) Message Queue消息传送系统提供传送服务.消息传送依赖于大量支持组件,这些组件负责处理连接服务.消息的路由和传送.持久 ...

  4. 【CV】Pytorch一小时入门教程-代码详解

    目录 一.关键部分代码分解 1.定义网络 2.损失函数(代价函数) 3.更新权值 二.训练完整的分类器 1.数据处理 2. 训练模型(代码详解) CPU训练 GPU训练 CPU版本与GPU版本代码区别 ...

  5. python tornado教程_Tornado 简单入门教程(零)——准备工作

    前言: 这两天在学着用Python + Tornado +MongoDB来做Web开发(哈哈哈这个词好高端).学的过程中查阅了无数资料,也收获了一些经验,所以希望总结出一份简易入门教程供初学者参考.完 ...

  6. python向量计算库教程_NumPy库入门教程:基础知识总结

    原标题:NumPy库入门教程:基础知识总结 视学算法 | 作者 知乎专栏 | 来源 numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas, ...

  7. mysql query browswer_MySQL数据库新特性之存储过程入门教程

    MySQL数据库新特性之存储过程入门教程 在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用 ...

  8. python tensorflow教程_TensorFlow入门教程TensorFlow 基本使用T

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 TensorFlow入门教程 TensorFlow 基本使用 TensorFlow官方中文教程 TensorFlow 的特点: 使用图 (graph) 来 ...

  9. air调用java,AIR2.0入门教程:与Java应用交互

    在之前的一篇文章中,我介绍了如何使用AIR2.0新增的NativeProcess类与本地进程进行交互和通讯,在那个例子里面我们使用了C++ 的代码,实际上只要是基于命令行的标准输入输出,AIR2.0的 ...

最新文章

  1. umask及文件默认和原始权限说明
  2. 纽约时代广场广告费才7千元每天,花钱装逼值不值?
  3. h5 img js 点击图片放大_H5实现移动端图片预览:手势缩放, 手势拖动,双击放大......
  4. PHP 会话(session 时间设定)使用入门
  5. java网络通信:HTTP协议
  6. 告别 996,解放开发者,一站式 AI 开发平台助力 AI-Native 时代
  7. TensorFlow:交叉熵损失函数
  8. pip 安装 sklearn 教程
  9. 第2季极客沙龙资料分享 - 知行·前端体验主题交流会
  10. 大恒相机Python版Qt界面(一)
  11. VS2015使用opencv
  12. Word图表的中英题注及引用
  13. flex布局侧轴(交叉轴)对齐方式
  14. [Android]ProgressBar进度条
  15. 数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树
  16. 抠图大师:TouchRetouch for mac
  17. 用Github建立个人主页
  18. html5 新手引导插件,实现“新手引导”效果
  19. 模拟csgo开箱网开箱
  20. 74HC595扩展IO芯片的使用以及例程(74HC595A和75HC595D的区别)

热门文章

  1. Ai绘画-Midjourney常用关键词
  2. 如何实现网络自动化运维?
  3. 项目中验证过的CRC16.C 和CRC32.C文件
  4. 百度联合研究成果登上《自然》子刊 推动人才管理大数据智能化转型
  5. 通过接口封装Shopee商品列表、shopee详情、shopee评论数据接口代码展示教程
  6. 购物管理系统(管理员,客户)
  7. 数据报片分片和片偏移
  8. 图片防外盗解决方法(微博访问图片资源403问题),图片打不开显示不全
  9. Java外卖点餐系统【附全部代码】YYDS
  10. 【91数据恢复】.[killhackfiles@cock.li].Devos勒索病毒数据恢复