• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

nginx lua模块常用的指令

php 搞代码 4年前 (2022-01-23) 31次浏览 已收录 0个评论

lua_code_cache

语法:lua_code_cache on | off

默认: on

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

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

lua_package_path

语法:lua_package_path

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

适用上下文:http

设置lua代码的寻找目录。

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

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

init_by_lua(_file)

语法:init_by_lua

适用上下文:http

 init_by_lua 'cjson = require "cjson"'; server{location= /api {content_by_lua '                ngx.say(cjson.encode({dog = 5, cat = 6}))            ';}}

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

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

init_worker_by_lua(_file)

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

set_by_lua(_file)

语法:set_by_lua $res

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

location /foo {set$diff'';# we have to predefine the $diff variable here         set_by_lua $sum'            local a = 32            local b = 56             ngx.var.diff = a - b;  -- write to $diff directly            return a + b;          -- return the $sum value normally        ';echo "sum = $sum, diff = $diff";}

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

content_by_lua(_file)

语法:content_by_lua

适用上下文:location、location if

location /nginx_var {# MIME type determined by default_type:default_type'text/plain'; # try access /nginx_var?a=hello,worldcontent_by_lua "ngx.print(ngx.var['arg_a'], '\\n')";}

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

rewrite_by_lua(_file)

语法:rewrite_by_lua

适用上下文:location、location if

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

比如

location /foo {          set$a12;# create and initialize $a          set$b'';# create and initialize $b          rewrite_by_lua 'ngx.var.b = tonumber(ngx.var.a) + 1';          if($b='13'){             rewrite ^ /bar redirect;             break;          }             echo "res = $b";    }

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

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

location /foo {set$a12;# create and initialize $aset$b'';# create and initialize $brewrite_by_lua '            ngx.var.b = tonumber(ngx.var.a) + 1            if tonumber(ngx.var.b) == 13 then                return ngx.redirect("/bar");            end        ';         echo "res = $b";}

access_by_lua(_lua)

语法:acce9来源gaodai#ma#com搞@代~码$网搞gaodaima代码ss_by_lua

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

location / {deny    192.168.1.1;allow   192.168.1.0/24;allow   10.1.1.0/16;deny    all;         access_by_lua '            local res = ngx.location.capture("/mysql", { ... })            ...        '; # proxy_pass/fastcgi_pass/...}

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

header_filter_by_lua(_file)

语法:header_filter_by_lua

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

location / {proxy_passhttp://mybackend;header_filter_by_lua 'ngx.header.Foo = "blah"';}

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

body_filter_by_lua(_file)

语法:body_filter_by_lua

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

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

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

以上就介绍了nginx lua模块常用的指令,包括了方面的内容,更多相关内容请关注搞代码(www.gaodaima.com)!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:nginx lua模块常用的指令

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址