1、 安装

准备主要的三个安装包,分别是

nginx-1.15.9.tar.gz

LuaJIT-2.0.5.tar.gz

lua-nginx-module-0.10.14.tar.gz

相关版本可以去官网下载,放在自定义目录并解压:

先安装LuaJIT:

下面需要配置一下LuaJIT的环境变量,编译nginx时需要。

再将nginx和lua-nginx-module一起编译,先执行configure,

然后make

然后install:

启动nginx:

报错了,执行如下操作:

执行完后,启动成功。

2、常用逻辑

1)直接返回

2)获取url参数

3)获取request body

4)子请求转发

ngx.location.capture:是一个同步非阻塞的nginx子请求uri,nginx的子请求提供了一个非常强大的方式去实现非阻塞的内部请求,这些子请求仅仅是模拟HTTP请求,但是并没有额外的HTTP/TCP,它只能请求到相对于当前nginx服务器的路径,不能使用绝对路径进行访问。

5)POST请求修改消息体

3、常用指令介绍

lua_code_cache:

设置是否缓存lua file的代码,默认是on,即开启缓存,生产环境强烈建议开启缓存,否则会大大影响性能,但是自己开发调试时候可以关闭缓存,这样不需要reload nginx也可以是代码生效。

在调用过一次后,修改赋值内容为test_content_file_1,不需重启nginx,可以看到返回值不一样。

lua_package_path设置 set_by_lua*,content_by_lua* 和 其他脚本对 Lua 模块的查找路径。路径字符串是标准 Lua 路径格式,特殊标识 ;; 可被用来代表原始搜索路径。

lua_package_cpath设置 set_by_lua*,content_by_lua* 和其他脚本对 Lua C 模块的查找路径。 cpath 路径字符串是标准 Luacpath 路径格式,特殊标识;; 可被用来代表原始 cpath 路径。

init_by_lua_block当Nginx master进程加载Nginx配置文件时,在全局的Lua虚拟机上运行<lua-script-str>指定的Lua代码。通常,我们可以在服务启动时注册Lua全局变量或预加载Lua模块。

init_by_lua_file把上面的处理部分转到lua文件,并且指定文件路径,其他的一样。

set_by_lua_block将处理结果返回到预定义入参,该指令被设计为执行短小、快速的代码块,因为代码执行时Nginx的事件循环是被阻塞的,因此应避免耗时的代码处理。

set_by_lua_file已文件方式使用上述说明。

content_by_lua_block

为每个请求执行<lua script str>中指定的lua代码,Lua代码可以进行API调用,并在独立的全局环境中作为新生成的协程执行,不要在同一位置使用此指令和其他内容处理程序指令。例如,此指令和proxy-pass指令不应在同一位置使用。

举例见上面常用逻辑里的图。

content_by_lua_file:以文件方式使用content_by_lua。

rewrite_by_lua_block:作为一个rewrite阶段的处理程序,为每个请求执行由<lua-script-str>指定的Lua代码。这些Lua代码可以调用全部 API,并作为一个新的协程,在一个独立的全局环境中执行,注意这个处理过程总是在标准ngx_http_rewrite_module的后面。

重写URL:

rewrite_by_lua_file:rewrite_by_lua的文件表示。

access_by_lua_block:access阶段处理,对每次请求执行在<lua-script-str>中指名的Lua代码,这些Lua代码可以调用 全部 API,并作为一个新的协程,在一个独立的全局环境中执行,本指令的处理总是在标准ngx_http_access_module的后面,access_by_lua不能运行在子请求中。

如果child返回200,则:

修改child转发的url,转发到不存在的地址:

access_by_lua_fileaccess_by_lua的文件表示。

header_filter_by_lua_block:用<lua-script-str>中指名的lua代码,来完成应答消息头部的过滤。

header_filter_by_lua_file:header_filter_by_lua的文件表示。

body_filter_by_lua_block:使用<lua-script-str>指定的Lua代码定义一个输出应答体过滤器。输入数据块是ngx.arg[1](Lua的字符串形式),结束标识"eof"是应答体数据最后一位ngx.arg[2](Lua的布尔值形式)。

body_filter_by_lua_file:body_filter_by_lua的文件表示。

balancer_by_lua_block:该指令执行上游的负载均衡Lua代码,代码配置在upstream {}小节中。Lua 负载均衡能完全忽略配置在upstream {}小节中定义的服务列表,并且从一个完全动态的服务列表中挑选一个节点,所有这些均是通过lua-resty-core库的ngx.balancer完成。

在8080,8081分别启动相同的服务,通过传入的index完成服务端选择:

balancer_by_lua_file:balancer_by_lua_block的文件表示。

有人翻译了lua-nginx-module,地址如下:

https://github.com/iresty/nginx-lua-module-zh-wiki#ssl_certificate_by_lua_block

通过lua扩展nginx的更多相关文章

  1. OpenResty:通过 Lua 扩展 NGINX 实现的可伸缩的 Web 平台

    关于 http://openresty.org/cn/about.html 这个开源 Web 平台主要由章亦春(agentzh)维护.在 2011 年之前曾由淘宝网赞助,在后来的 2012 ~ 201 ...

  2. OpenResty入门之使用Lua扩展Nginx

    记住一点:nginx配置文件很多坑来源自你的空格少了或多了. 1.Centos下载安装 如果你的系统是 Centos 或 RedHat 可以使用以下命令: yum install readline-d ...

  3. 通过 Lua 扩展 NGINX 实现的可伸缩的 Web 平台OpenResty®

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

  4. 用lua扩展你的Nginx(整理)-----openresty

    用lua扩展你的Nginx(整理) 首先得声明.这不是我的原创,是在网上搜索到的一篇文章,原著是谁也搞不清楚了.按风格应该是属于章亦春的文章. 整理花了不少时间,所以就暂写成原创吧. 一. 概述 Ng ...

  5. 用lua扩展你的Nginx(整理)

    首先得声明.这不是我的原创,是在网上搜索到的一篇文章,原著是谁也搞不清楚了.按风格应该是属于章亦春的文章. 整理花了不少时间,所以就暂写成原创吧. 一. 概述 Nginx是一个高性能.支持高并发的,轻 ...

  6. 给lnmp一键包中的nginx安装openresty的lua扩展

    lnmp一键包(https://lnmp.org)本人在使用之后发现确实好用,能帮助我们快速搭建起lnmp.lamp和lnmpa的web生产环境,因此推荐大家可以多试试.但有的朋友可能需要使用open ...

  7. lua使用笔记2:Linux 中安装php的lua扩展

    安装lua扩展的前提是lua已经安装好,如果没有安装,参照 1.http://pecl.php.net/package/lua 下载lua扩展 或者Linux下直接输入 wget http://pec ...

  8. Lua在Nginx的应用

    当 Nginx 标准模块和配置不能灵活地适应系统要求时,就可以考虑使用 Lua 扩展和定制 Nginx 服务.OpenResty集成了大量精良的 Lua 库.第三方模块,可以方便地搭建能够处理超高并发 ...

  9. OpenResty 最佳实践 lua与nginx的结合 --引用自https://moonbingbing.gitbooks.io/openresty-best-practices/content/

    系统的说明了lua在nginx上的开发 请大家到源址查看 OpenResty最佳实践

随机推荐

  1. 【BZOJ 3709: [PA2014]Bohater】

    首先,这是我n久之前培训的时候老师讲的题目了,今天突然看到,那就讲讲吧. 首先,我们考虑怎么打怪... 显然,我们需要保证这个怪要尽可能的打死(就是尽量不被干死),并且保证尽可能的净获得血量大的在前面 ...

  2. bat脚本延时启动exe和bat文件

    @echo off ping >nul start D:\exe\a.exe start "C:\Program Files\维护工具\卸载清除一键清理系统垃圾文件.bat" ...

  3. 手动清空微信PC客户端数据

    微信PC客户端,用久了之后,会产生大量数据,包括聊天记录.聊天图片.视频等等,非常占存储空间,除非很重要的聊天记录或文件,建议额外保存,其他的可以手动删掉就好,可以节省存储空间. 1.找到[C:\Us ...

  4. Jmeter(十一)测试监听

    性能测试监控的主要任务是获取运行状态收集测试结果, 再对测试结果进行分析. 测试结果有事务响应时间,吞吐量及服务器硬件性能 , 数据库性能状态等等. Jmeter对长时间执行测试计划使用的监听器主要是 ...

  5. ControlTemplate in WPF —— Menu

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x ...

  6. ffmpeg 视频过度滤镜 gltransition

    ffmpeg 视频过度滤镜 gltransition 上次随笔中提到的 ffmpeg-concat 可以处理视频过度,但是缺点是临时文件超大. 经过查找 ffmpeg 还有 gltransition ...

  7. jmeter监控服务器性能(windows系统)

    一.jmeter安装插件 前两个是jmeter插件,安装到本地的jmeter文件夹下第三个是放到服务器里的 jmeter插件官网地址:https://jmeter-plugins.org/ [我分享的 ...

  8. python学习之数据类型(List)

    3.5 列表 3.5.1 列表的介绍 ​ 列表是python的基础数据类型之⼀,其他编程语言也有类似的数据类型. 比如JS中的数组, java中的数组等等.它是以[ ]括起来, 每个元素⽤' , '隔 ...

  9. 20191224 Spring官方文档(Overview)

    Spring框架概述 从Spring Framework 5.1开始,Spring需要JDK 8+(Java SE 8+),并提供对JDK 11 LTS的现成支持.建议将Java SE 8更新60作为 ...

  10. HDU-4717 The Moving Points(凸函数求极值)

    The Moving Points Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...