Openresty使用
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* : 设置header和cookie
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
u 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使用的更多相关文章
- 火焰图分析openresty性能瓶颈
注:本文操作基于CentOS 系统 准备工作 用wget从https://sourceware.org/systemtap/ftp/releases/下载最新版的systemtap.tar.gz压缩包 ...
- openresty 前端开发入门五之Mysql篇
openresty 前端开发入门五之Mysql篇 这章主要演示怎么通过lua连接mysql,并根据用户输入的name从mysql获取数据,并返回给用户 操作mysql主要用到了lua-resty-my ...
- openresty 前端开发入门六之调试篇
大多数情况下,调试信息,都可以通过ngx.say打印出来,但是有的时候,我们希望打印调试日志,不影响到返回数据,所以系统打印到其它地方,比如日志文件,或者控制台 这里主要用到一个方法就是ngx.log ...
- openresty 前端开发序
还记得第一次尝试前后端分离的时候,是使用nginx + react 构建的spa应用,后端是java,主要处理业务逻辑逻辑部分,返回json数据,在nginx里面配置好html + js纯静态文件,再 ...
- openresty 前端开发入门一
OpenResty ™ 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发.扩展性极高的动态 ...
- mac下openresty安装
//openresty安装 http://openresty.org/ brew updatebrew install pcre openssl ./configure --prefix=/usr/l ...
- 如何在openresty里解析域名
转:原文:http://hambut.com/2016/09/09/how-to-resolve-the-domain-name-in-openresty/?utm_source=tuicool&am ...
- 用Nginx+Lua(OpenResty)开发高性能Web应用
在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等场景:而把Nginx作为一个Web容器使用的还不是那么广泛.Nginx的高性能是大家公认的,而Nginx开 ...
- OpenResty 是一个全功能的 Web 应用服务器
OpenResty (也称为 ngx_openresty)是一个全功能的 Web 应用服务器.它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项. 通过众多进行良好设计的 ...
- 安装lua和openresty
#### ubuntu 16.04 64bit 安装Lua luajit 及openresty 1 安装lua ,因为luajit 支持lua5.1较好.貌似不支持5.2和5.3作为学习,我就安装5. ...
随机推荐
- 高吞吐量消息系统—kafka
现在基本上大数据的场景中都会有kafka的身影,那么为什么这些场景下要用kafka而不用其他传统的消息队列呢?例如rabbitmq.主要的原因是因为kafka天然的百万级TPS,以及它对接其他大数据组 ...
- HTML基础-04
定位 定位:通过定位可以将元素摆放在页面中任意位置 语法:position属性设置元素的定位 可选值:static:默认值,开启定位 relative开启相对定位 absolute开启绝对定位 fix ...
- python设计模式之模型-视图-控制器模式
python设计模式之模型-视图-控制器模式 关注点分离( Separation of Concerns, SoC)原则是软件工程相关的设计原则之一. SoC原则背后的思想是将一个应用切分成不同的部分 ...
- 简单快速搭建钓鱼wifi
前言 钓鱼wifi是很久的话题了,但是传统的方法可能比较麻烦需要手动配置dhcp,dns,网卡,流量转发,比较麻烦,而且还有根据每次的网络环境需要重新的配置,这里介绍用WIFIpumpkin3工具简单 ...
- 【算法•日更•第三十二期】教你用出windows体验的Linux
▎前言 小编昨天闲的不行,就装了一个linux系统,linux的发行版很多,小编认为ubuntu很好用,于是就在使用ubuntu. 没错,我现在就在使用ubuntu来写博客. 刚才还装了一个QQ,不过 ...
- Mybatis 中判断参数长度
<if test="params.length()!=2">
- SparkStreaming架构
SparkStreaming是一个对实时数据流进行高通量.容错处理的流式处理系统,可以对多种数据源(如Kdfka.Flume.Twitter.Zero和TCP 套接字)进行类似Map.Reduce和J ...
- Spring官方宣布:新的Spring OAuth2.0授权服务器已经来了
1. 前言 记不记得之前发过一篇文章Spring 官方发起Spring Authorization Server 项目.该项目是由Spring Security主导的一个社区驱动的.独立的孵化项目.由 ...
- Protocol buffers--python 实践 简介以及安装与使用
简介: Protocol Buffers以下简称pb,是google开发的一个可以序列化 反序列化object的数据交换格式,类似于xml,但是比xml 更轻,更快,更简单.而且以上的重点突出一个跨平 ...
- 使用grub2引导进入Linux或Window系统
很多人在一通烂搞之后把自己的grub搞崩了(比如我当时手贱删除了boot分区)虽然后来又装了grub,但是进入grub后还是没有引导,只有一个孤零零的命令行界面 这时候应该怎么办呢?首先当然是想进入系 ...