一、 安装nginx
准备主要的三个安装包,分别是git
nginx-1.15.9.tar.gzgithub
LuaJIT-2.0.5.tar.gz缓存
lua-nginx-module-0.10.14.tar.gz服务器
相关版本能够去官网下载,放在自定义目录并解压:负载均衡
先安装LuaJIT:性能
下面须要配置一下LuaJIT的环境变量,编译nginx时须要。lua
再将nginx和lua-nginx-module一块儿编译,先执行configure,url
而后makespa
而后install:
启动nginx:
报错了,执行以下操做:
执行完后,启动成功。
二、经常使用逻辑
1)直接返回
2)获取url参数
3)获取request body
4)子请求转发
ngx.location.capture:是一个同步非阻塞的nginx子请求uri,nginx的子请求提供了一个很是强大的方式去实现非阻塞的内部请求,这些子请求仅仅是模拟HTTP请求,可是并无额外的HTTP/TCP,它只能请求到相对于当前nginx服务器的路径,不能使用绝对路径进行访问。
5)POST请求修改消息体
三、经常使用指令介绍
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_file:access_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