首页 后端开发 php教程 nginx lua模块常用的指令

nginx lua模块常用的指令

Aug 08, 2016 am 09:31 AM

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)


语法:access_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模块常用的指令,包括了方面的内容,更多相关内容请关注PHP中文网(www.php.cn)!


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

nginx怎么查版本 nginx怎么查版本 Apr 14, 2025 am 11:57 AM

可以查询 Nginx 版本的方法有:使用 nginx -v 命令;查看 nginx.conf 文件中的 version 指令;打开 Nginx 错误页,查看页面的标题。

nginx怎么配置云服务器域名 nginx怎么配置云服务器域名 Apr 14, 2025 pm 12:18 PM

在云服务器上配置 Nginx 域名的方法:创建 A 记录,指向云服务器的公共 IP 地址。在 Nginx 配置文件中添加虚拟主机块,指定侦听端口、域名和网站根目录。重启 Nginx 以应用更改。访问域名测试配置。其他注意事项:安装 SSL 证书启用 HTTPS、确保防火墙允许 80 端口流量、等待 DNS 解析生效。

怎么查看nginx是否启动 怎么查看nginx是否启动 Apr 14, 2025 pm 01:03 PM

确认 Nginx 是否启动的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 检查端口 80 是否开放;3. 查看系统日志中 Nginx 启动消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

docker容器名称怎么查 docker容器名称怎么查 Apr 15, 2025 pm 12:21 PM

可以通过以下步骤查询 Docker 容器名称:列出所有容器(docker ps)。筛选容器列表(使用 grep 命令)。获取容器名称(位于 "NAMES" 列中)。

nginx在windows中怎么配置 nginx在windows中怎么配置 Apr 14, 2025 pm 12:57 PM

如何在 Windows 中配置 Nginx?安装 Nginx 并创建虚拟主机配置。修改主配置文件并包含虚拟主机配置。启动或重新加载 Nginx。测试配置并查看网站。选择性启用 SSL 并配置 SSL 证书。选择性设置防火墙允许 80 和 443 端口流量。

怎么启动nginx服务器 怎么启动nginx服务器 Apr 14, 2025 pm 12:27 PM

启动 Nginx 服务器需要按照不同操作系统采取不同的步骤:Linux/Unix 系统:安装 Nginx 软件包(例如使用 apt-get 或 yum)。使用 systemctl 启动 Nginx 服务(例如 sudo systemctl start nginx)。Windows 系统:下载并安装 Windows 二进制文件。使用 nginx.exe 可执行文件启动 Nginx(例如 nginx.exe -c conf\nginx.conf)。无论使用哪种操作系统,您都可以通过访问服务器 IP

docker怎么创建容器 docker怎么创建容器 Apr 15, 2025 pm 12:18 PM

在 Docker 中创建容器: 1. 拉取镜像: docker pull [镜像名] 2. 创建容器: docker run [选项] [镜像名] [命令] 3. 启动容器: docker start [容器名]

docker怎么启动容器 docker怎么启动容器 Apr 15, 2025 pm 12:27 PM

Docker 容器启动步骤:拉取容器镜像:运行 "docker pull [镜像名称]"。创建容器:使用 "docker create [选项] [镜像名称] [命令和参数]"。启动容器:执行 "docker start [容器名称或 ID]"。检查容器状态:通过 "docker ps" 验证容器是否正在运行。

See all articles