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查询操作

 

Openresty使用的更多相关文章

  1. 火焰图分析openresty性能瓶颈

    注:本文操作基于CentOS 系统 准备工作 用wget从https://sourceware.org/systemtap/ftp/releases/下载最新版的systemtap.tar.gz压缩包 ...

  2. openresty 前端开发入门五之Mysql篇

    openresty 前端开发入门五之Mysql篇 这章主要演示怎么通过lua连接mysql,并根据用户输入的name从mysql获取数据,并返回给用户 操作mysql主要用到了lua-resty-my ...

  3. openresty 前端开发入门六之调试篇

    大多数情况下,调试信息,都可以通过ngx.say打印出来,但是有的时候,我们希望打印调试日志,不影响到返回数据,所以系统打印到其它地方,比如日志文件,或者控制台 这里主要用到一个方法就是ngx.log ...

  4. openresty 前端开发序

    还记得第一次尝试前后端分离的时候,是使用nginx + react 构建的spa应用,后端是java,主要处理业务逻辑逻辑部分,返回json数据,在nginx里面配置好html + js纯静态文件,再 ...

  5. openresty 前端开发入门一

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

  6. mac下openresty安装

    //openresty安装 http://openresty.org/ brew updatebrew install pcre openssl ./configure --prefix=/usr/l ...

  7. 如何在openresty里解析域名

    转:原文:http://hambut.com/2016/09/09/how-to-resolve-the-domain-name-in-openresty/?utm_source=tuicool&am ...

  8. 用Nginx+Lua(OpenResty)开发高性能Web应用

    在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等场景:而把Nginx作为一个Web容器使用的还不是那么广泛.Nginx的高性能是大家公认的,而Nginx开 ...

  9. OpenResty 是一个全功能的 Web 应用服务器

    OpenResty (也称为 ngx_openresty)是一个全功能的 Web 应用服务器.它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项. 通过众多进行良好设计的 ...

  10. 安装lua和openresty

    #### ubuntu 16.04 64bit 安装Lua luajit 及openresty 1 安装lua ,因为luajit 支持lua5.1较好.貌似不支持5.2和5.3作为学习,我就安装5. ...

随机推荐

  1. C#设计模式之9-装饰者模式

    装饰者模式(Decorator Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/405 访问. 装饰者模 ...

  2. C#LeetCode刷题之#575-分糖果​​​​​​​(Distribute Candies)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3798 访问. 给定一个偶数长度的数组,其中不同的数字代表着不同种 ...

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

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

  4. HTML实例-01-轮播图

     body部分 <div class="outer"> <ul class="img-list"> <li><a hr ...

  5. Java并发--volatile关键字

    一.volatile的实现原理 synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁,而volatile就可以说是JVM提供的最轻量级的同步机制.JMM告诉我们,各个线程会将共 ...

  6. 《Head First 设计模式》:适配器模式

    正文 一.定义 适配器模式将一个类的接口(被适配者),转换成客户期望的另一个接口.适配器让原本接口不兼容的类可以合作无间. 要点: 适配器实现了目标接口,并持有被适配者的实例. 适配器使用被适配者的方 ...

  7. markdown使用手册

    github上找到了一个挺全面的项目,mark一下. https://github.com/nicejade/nice-front-end-tutorial/blob/master/tutorial/ ...

  8. Paillier同态加密实现

    一.C++(该方案只实现了加密以及解密) 1.git clone https://github.com/klei0229/paillier.git 2.下载GMP与NTL包: 下载版本以及操作参见ht ...

  9. MySQL进阶之MySQL索引以及索引优化

    本文配合B站学习视频BV1es411u7we使用效果更佳. 1. MySQL版本 主流版本:5.x版 5.0 - 5.1:早期产品的延续,升级维护 5.4 - 5.x:MySQL整合了三方公司的新存储 ...

  10. Charles 断点修改Response

    前言: 我们可以通过map功能进行重定向,但如果同一个域名进行的是不同请求与返回.此时map在这里就不适用了. 我们可以通关对某一请求进行断点,在进行修改请求或者返回.这样就可以满足我们的需求了. 一 ...