OpenResty是一个全功能的 Web 应用服务器。它打包了标准的 Nginx 核心,常用的第三方模块以及大多数依赖项。 可以把它看成是Nginx附加众多的第三方插件的合集。其主体是嵌入lua脚本的支持,让你能够使用lua灵活地处理运算逻辑。

本课程主要讲lua为Nginx带来的新的处理方式,及OpenResty组件的使用。

12.1. Openresty的安装配置

12.1.1. 简易的yum安装方式

此方式简单,缺点是无法干预启停插件

yum install yum-utils

yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo

yum install openresty

12.1.2. 源码安装方式

wget https://openresty.org/download/openresty-1.15.8.1.tar.gz

tar -zxvf openresty-1.15.8.1.tar.gz

##选择需要的插件启用, --with-Components 激活组件,--without 则是禁止组件

./configure  --without-http_redis2_module  --with-http_iconv_module

make  && make install

vi /etc/profile ##加入path路径

export PATH=$PATH:/usr/local/openresty/nginx/sbin/

source /etc/profile ##生效配置

12.1.3. 安装检测

nginx  -V   ##如下显示,则表示安装成功

12.2. Lua介入Nginx带来的基础api

主要帮助对http请求取参、取header头、输出等

ngx.arg

指令参数,如跟在content_by_lua_file后面的参数

ngx.var

request变量,ngx.var.VARIABLE引用某个变量

ngx.ctx

请求的lua上下文

ngx.header

响应头,ngx.header.HEADER引用某个头

ngx.status

响应码

ngx.log

输出到error.log

ngx.send_headers

发送响应头

ngx.headers_sent

响应头是否已发送

ngx.resp.get_headers

获取响应头

ngx.is_subrequest

当前请求是否是子请求

ngx.location.capture

发布一个子请求

ngx.location.capture_multi

发布多个子请求

ngx.print

输出响应

ngx.say

输出响应,自动添加‘\n‘

ngx.flush

刷新响应

ngx.exit

结束请求

12.3. Lua嵌入Nginx的时机阶段

Nginx执行lua脚本片断时,需要明确指明执行的nginx阶段时机。主要有以下几种时机:

set_by_lua* : 设置nginx变量,实现复杂的赋值逻辑 

rewrite_by_lua* : 实现转发、重定向等功能 

access_by_lua* : IP 准入、接口访问权限等情况集中处理 

content_by_lua* : 接收请求处理并输出响应 

header_filter_by_lua* : 设置headercookie

body_filter_by_lua* : 对响应数据进行过滤,如截断/替换等

12.4. Lua基础功能使用介绍

12.4.1. hello world

在content阶段,执行lua脚本,输出hello,peter

12.4.2. 执行lua脚本文件

12.4.3. lua取get参数

页面请求路径:http://lua.enjoy.com/args?a=20&b=50

则ngx.var.arg_a即取得a参数值,如下图:

12.4.4. lua取全量参数

请求:http://lua.enjoy.com/args_read?a=20&b=50

12.4.5. lua取request中header信息

12.4.6. 给lua脚本传参

使用端传参:

脚本中借助ngx.arg取参

 

12.4.7. 权限校验

一般校验动作,指定在access阶段执行脚本

脚本处理

12.4.8. 内容过滤

Nginx有时候,需要对下游服务生成的内容进行处理过滤,如下图

脚本中的处理

12.5. Lua引入第三方模块的使用

OpenResty提供了非常多的第三方插件,支持操作redis/mysql等服务,lua使用它们的模式一般按以下流程

u require  “resty/xxx” :导入模块功能,类似java中的import导入类

u local  obj = xxx:new() :模块创建对象obj

local ok, err  = obj :connect :对象连接到目标库

u obj :method :这里可以为所欲为,尽情操纵目标库了

12.5.1. Lua-resty-redis连接redis用法

Lua-resty-redis插件,对Nginx操作redis的支持十分强大,成熟的用法演示如下:

基础的引入、连接动作

 

redis操作动作

具体全量的程序,见源码配置包

12.5.2. Lua-resty-mysql连接mysql数据库

引入模块、创建连接

 

mysql查询操作

 

转载于:https://www.cnblogs.com/Soy-technology/p/11355625.html

Openresty使用相关推荐

  1. OpenResty搭建高性能服务端

    Socket编程 Linux Socket编程领域为了处理大量连接请求场景,需要使用非阻塞I/O和复用,select.poll.epoll是Linux API提供的I/O复用方式,自从Linux2.6 ...

  2. OpenResty中的upstream healthcheck功能沉思录

    综述 healthcheck功能本质上还是个定时器,去定期检查指定upstream组的状态,它发送指定的http请求并解析响应码,去探测upstream中每个peer的存活状态,再结合历史请求记录来判 ...

  3. OpenResty学习中的几个小例子汇总

    1.测试lua或是LuaJIT的版本号 如果使用的是标准 Lua,访问 /lua-version 应当返回响应体 Lua 5.1 如果是 LuaJIT 则应当返回类似 LuaJIT 2.0.2 这样的 ...

  4. 在CentOS 6.9 x86_64的OpenResty 1.13.6.1上使用基于Redis实现动态路由示例

    下面是我阅读春哥OpenResty官网主页中"Dynamic Routing Based On Redis"一节的实操记录,整理如下. https://openresty.org/ ...

  5. 在CentOS 6.9 x86_64的OpenResty 1.13.6.1上使用LuaRocks示例

    下面是我阅读春哥OpenResty官网主页中"Using LuaRocks"一节的实操记录,整理如下. https://openresty.org/cn/using-luarock ...

  6. 在CentOS 6.9 x86_64上玩转OpenResty 1.13.6.1中的resty-cli模块

    resty-cli是OpenResty中命令行工具的集合,其中resty工具是最有用的. 安装好OpenResty之后,resty-cli就会默认安装,以我的安装为例,参见博文 http://blog ...

  7. OpenResty中遇到Can't locate Time/HiRes.pm in @INC问题的解决方法

    今天在研究resty这个命令行工具时,执行 resty -h 出现下面的报错 Can't locate Time/HiRes.pm in @INC (@INC contains: /usr/local ...

  8. 在CentOS 6.9 x86_64上搭建全功能的OpenResty 1.13.6.1笔记

    好久没有玩OpenResty,这段时间机会难得,赶紧实践一下.下面是我在rMBP的CentOS 6.9 x86_64虚拟机上安装目前最新版OpenResty 1.13.6.1的笔记. OpenRest ...

  9. 在Ubuntu 14.04 64bit上安装OpenResty 1.9.7.4

    为了自己的ThinkPad T420上面的Ubuntu可以使用openresty开发,我特地记录一下安装过程: 安装依赖包 apt-get install libreadline-dev libncu ...

  10. OpenResty上各种测试用例实操(1)

    下面记录了我阅读<OpenResty最佳实践>过程中对一些例子的实践操作示例,记录以作备忘. 一.Location的组合使用 演示一个location只作为内部调用接口,被另一个locat ...

最新文章

  1. php sku添加,php – 在单个产品页面中显示SKU下的自定义字段值
  2. SAP S4 HANA-The future is here?
  3. Python【每日一问】08
  4. Openjudge_ 2.1基本算法之枚举_1809 两倍 C++ scratch
  5. Hyperledger Fabric学习笔记(二)- Fabric 2.2.1环境搭建
  6. Bailian2739 计算对数【对数】
  7. Spring Boot 注解描述
  8. Netty的并发编程实践1:正确使用锁
  9. PWA--未来式app
  10. Javaweb基础-SQL增删改查
  11. AD元器件英中名称对照【Ctrl + F 快速查找元器件英文名称】
  12. 【Andriod Studio实现拨打电话和发送短信功能】
  13. 国产系统中标麒麟安装教程
  14. 红孩儿编辑器的模块设计5
  15. 老猿学5G专栏完结说明
  16. C++解决猜大小问题
  17. 算法题 金银铜奖牌排序
  18. 域控服务器的dns配置,如何配置额外域控制器上的DNS?
  19. NVIDA和AMD天梯图
  20. Matlab-mex

热门文章

  1. 程序员们的时间管理法则
  2. iOS:极光推送控制器跳转
  3. #在蓝懿学习iOS的日子#第六个练习日
  4. 计算机软件和程序设计基本知识,计算机语言与程序设计
  5. java实现 k nn算法_数据挖掘(二)——Knn算法的java实现
  6. java 结构数据结构_Java 数据结构
  7. html研究中心,seo研究中心 教程:认识HTML、css的重要性-专业SEO技
  8. G41显卡Linux驱动,Intel最新G41/G43/G45集成显卡驱动下载
  9. linux mysql设置数据库utf_Linux系统下MySQL数据库服务器字符集设置
  10. C++知识点62——模板实参推断与函数模板的特化