lua_code_cache

语法:lua_code_cache on | off

默认: on

适用上下文:http、server、location、location if

这个指令是指定是否开启lua的代码编译缓存,开发时可以设置为off,以便lua文件实时生效,如果是生产线上,为了性能,建议开启。

lua_package_path

语法:lua_package_path <lua-style-path-str>

默认:由lua的环境变量决定

适用上下文:http

设置lua代码的寻找目录。

例如:lua_package_path "/opt/nginx/conf/www/?.lua;;";

具体的路径设置要参考lua的模块机制

init_by_lua(_file)

语法:init_by_lua <lua-script-str>

适用上下文:

  1. http
  2. init_by_lua 'cjson = require "cjson"';
  3. server {
  4. location = /api {
  5. content_by_lua '
  6. ngx.say(cjson.encode({dog = 5, cat = 6}))
  7. ';
  8. }
  9. }

从这段配置代码,我们可以看出,其实这个指令就是初始化一些lua的全局变量,以便后续的代码使用。

注:有(_file)的选项代表可以直接引用外部的lua源代码文件,效果与直接写配置文件一样,不过可维护性当然是分开好点。

init_worker_by_lua(_file)

类似于上面的,不过是作用在work进程的,先于work进程启动而调用。

set_by_lua(_file)

语法:set_by_lua $res <lua-script-str> [$arg1 $arg2 ...]

适用上下文:server、location、location if

  1. location /foo {
  2. set $diff ''; # we have to predefine the $diff variable here
  3. set_by_lua $sum '
  4. local a = 32
  5. local b = 56
  6. ngx.var.diff = a - b; -- write to $diff directly
  7. return a + b; -- return the $sum value normally
  8. ';
  9. echo "sum = $sum, diff = $diff";
  10. }

这个指令是为了能够让nginx的变量与lua的变量相互作用赋值

content_by_lua(_file)

语法:content_by_lua <lua-script-str>

适用上下文:location、location if

  1. location /nginx_var {
  2. # MIME type determined by default_type:
  3. default_type 'text/plain';
  4. # try access /nginx_var?a=hello,world
  5. content_by_lua "ngx.print(ngx.var['arg_a'], '\\n')";
  6. }

通过这个指令,可以由lua直接确定nginx响应页面的正文。

rewrite_by_lua(_file)

语法:rewrite_by_lua <lua-script-str>

适用上下文:location、location if

这个指令更多的是为了替代HttpRewriteModule的rewrite指令来使用的,优先级低于rewrite指令

比如

  1. location /foo {
  2. set $a 12; # create and initialize $a
  3. set $b ''; # create and initialize $b
  4. rewrite_by_lua 'ngx.var.b = tonumber(ngx.var.a) + 1';
  5. if ($b = '13') {
  6. rewrite ^ /bar redirect;
  7. break;
  8. }
  9. echo "res = $b";
  10. }

这个并不会像预期的那样子,因为我猜测,rewrite_by_lua是开启一个协程去工作的,可是下面却继续执行下去了,所以得不到预期的结果。

此时如果由lua代码来控制rewrite,那就没有问题了。

  1. location /foo {
  2. set $a 12; # create and initialize $a
  3. set $b ''; # create and initialize $b
  4. rewrite_by_lua '
  5. ngx.var.b = tonumber(ngx.var.a) + 1
  6. if tonumber(ngx.var.b) == 13 then
  7. return ngx.redirect("/bar");
  8. end
  9. ';
  10. echo "res = $b";
  11. }

access_by_lua(_file)

语法:access_by_lua <lua-script-str>

适用上下文:http, server, location, location if

  1. location / {
  2. deny 192.168.1.1;
  3. allow 192.168.1.0/24;
  4. allow 10.1.1.0/16;
  5. deny all;
  6. access_by_lua '
  7. local res = ngx.location.capture("/mysql", { ... })
  8. ...
  9. ';
  10. # proxy_pass/fastcgi_pass/...
  11. }

顾名思义,这个指令用在验证通过或者需要验证的时候。

header_filter_by_lua(_file)

语法:header_filter_by_lua <lua-script-str>

适用上下文:http, server, location, location if

  1. location / {
  2. proxy_pass http://mybackend;
  3. header_filter_by_lua 'ngx.header.Foo = "blah"';
  4. }

用lua的代码去指定http响应的 header一些内容。

body_filter_by_lua(_file)

语法:body_filter_by_lua <lua-script-str>

适用上下文:http, server, location, location if

  1. location /t {
  2. echo hello world;
  3. echo hiya globe;
  4. body_filter_by_lua '
  5. local chunk = ngx.arg[1]
  6. if string.match(chunk, "hello") then
  7. ngx.arg[2] = true -- new eof
  8. return
  9. end
  10. -- just throw away any remaining chunk data
  11. ngx.arg[1] = nil
  12. ';
  13. }

这个指令可以用来篡改http的响应正文的。

转:https://blog.csdn.net/xiaofei0859/article/details/76864544

相关推荐:

Lua在Nginx的应用

nginx lua模块常用的指令的更多相关文章

  1. mac下Nginx+lua模块编译安装

    Nginx的nb之处就不说了,lua也是一个小巧的脚本语言,由标准C编写而成,几乎可以运行在所有的平台上,也非常强大,其他特性请自行度娘.nginx_lua_module是由淘宝的工程师清无(王晓哲) ...

  2. Nginx主要模块常用指令说明

    核心模块(Core Modules): 主模块(Main Module):配置和服务器全局有关的一些参数,比如错误日志.进程.权限等 user worker_processes error_logsy ...

  3. nginx核心模块常用指令

    默认启动Nginx时,使用的配置文件是: 安装路径/conf/nginx.conf 文件,可以在启动nginx的时候,通过-c来指定要读取的配置文件 常见的配置文件有如下几个: nginx.conf: ...

  4. nginx lua模块安装

    1.安装LuaJIT,LuaJIT为LuaJIT is a Just-In-Time Compiler (JIT) for the Lua programming language wget http ...

  5. OpenResty(Nginx + Lua)常用操作

    平滑重启: /usr/servers/nginx/sbin/nginx  -s reload 重启前测试配置是否成功 /usr/servers/nginx/sbin/nginx  -t 平滑升级如果服 ...

  6. 高并发 Nginx+Lua OpenResty系列(3)——模块指令

    Nginx Lua 模块指令 Nginx共11个处理阶段,而相应的处理阶段是可以做插入式处理,即可插拔式架构:另外指令可以在http.server.server if.location.locatio ...

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

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

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

    使用Nginx+Lua(OpenResty)开发高性能Web应用 博客分类: 跟我学Nginx+Lua开发 架构 ngx_luaopenresty 在互联网公司,Nginx可以说是标配组件,但是主要场 ...

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

    摘自(http://jinnianshilongnian.iteye.com/blog/2280928) 在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等 ...

随机推荐

  1. 求Fibonacci数列通项公式

    0. Intro \[f_n=\begin{cases} 0 & (n=0) \\ 1 & (n=1) \\ f_{n-1}+f_{n-2} & (n>1) \end{c ...

  2. CF Round #687 Div2 简要题解

    题面 A 可以发现,最远的几个人一定是 \((1, 1), (1, m), (n, 1), (n, m)\) 中的一个,直接计算即可. B 注意到颜色数量很少,直接暴力枚举最终的颜色后模拟即可. C ...

  3. Java协变、逆变、类型擦除

    协变.逆变 定义 Java中String类型是继承自Object的,姑且记做String ≦ Object,表示String是Object的子类型,String的对象可以赋给Object的对象.而Ob ...

  4. Java 书写规范简单整理

    本文带有华为Logo的PPT图片,引自:华为云课堂 目录 Java基础语句使用规范 选择结构 switch 默认要有default分支 注意break的使用 如果使用枚举,并且选项已全部列出,可以没有 ...

  5. JAVA多线程学习- 三:volatile关键字

    Java的volatile关键字在JDK源码中经常出现,但是对它的认识只是停留在共享变量上,今天来谈谈volatile关键字. volatile,从字面上说是易变的.不稳定的,事实上,也确实如此,这个 ...

  6. 自定义的类实现copy操作

    1.自定义类实现copy操作 让类遵守NSCopying协议 实现 copyWithZone:方法,在该方法中返回一个对象的副本即可. 在copyWithZone方法中,创建一个新的对象,并设置该对象 ...

  7. Java基础总结(二)

    1.ArrayList和Vector的区别 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的 ...

  8. 《Effective Python》笔记——第1章 用Pythonic方式来思考

    一. 遵循PEP8风格指南. PEP8是对python代码格式而编订的风格指南.地址:https://www.python.org/dev/peps/pep-0008/ 个人觉得不一定完全按照PEP8 ...

  9. unittest基础篇1

    转自http://blog.csdn.net/huilan_same/article/details/52944782 unittest是xUnit系列框架中的一员,如果你了解xUnit的其他成员,那 ...

  10. Solution -「Gym 102979E」Expected Distance

    \(\mathcal{Description}\)   Link.   用给定的 \(\{a_{n-1}\},\{c_n\}\) 生成一棵含有 \(n\) 个点的树,其中 \(u\) 连向 \([1, ...