Home Backend Development PHP Tutorial Commonly used instructions for nginx lua module

Commonly used instructions for nginx lua module

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}))
            ';}}
Copy after login

从这段配置代码,我们可以看出,其实这个指令就是初始化一些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";}
Copy after login

这个指令是为了能够让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')";}
Copy after login

通过这个指令,可以由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";
    }
Copy after login

这个并不会像预期的那样子,因为我猜测,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";}
Copy after login


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/...}
Copy after login

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

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"';}
Copy after login

用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
        ';}
Copy after login

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

以上就介绍了nginx lua模块常用的指令,包括了方面的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to configure cloud server domain name in nginx How to configure cloud server domain name in nginx Apr 14, 2025 pm 12:18 PM

How to configure an Nginx domain name on a cloud server: Create an A record pointing to the public IP address of the cloud server. Add virtual host blocks in the Nginx configuration file, specifying the listening port, domain name, and website root directory. Restart Nginx to apply the changes. Access the domain name test configuration. Other notes: Install the SSL certificate to enable HTTPS, ensure that the firewall allows port 80 traffic, and wait for DNS resolution to take effect.

How to check nginx version How to check nginx version Apr 14, 2025 am 11:57 AM

The methods that can query the Nginx version are: use the nginx -v command; view the version directive in the nginx.conf file; open the Nginx error page and view the page title.

How to check whether nginx is started How to check whether nginx is started Apr 14, 2025 pm 01:03 PM

How to confirm whether Nginx is started: 1. Use the command line: systemctl status nginx (Linux/Unix), netstat -ano | findstr 80 (Windows); 2. Check whether port 80 is open; 3. Check the Nginx startup message in the system log; 4. Use third-party tools, such as Nagios, Zabbix, and Icinga.

How to check the name of the docker container How to check the name of the docker container Apr 15, 2025 pm 12:21 PM

You can query the Docker container name by following the steps: List all containers (docker ps). Filter the container list (using the grep command). Gets the container name (located in the "NAMES" column).

How to run nginx apache How to run nginx apache Apr 14, 2025 pm 12:33 PM

To get Nginx to run Apache, you need to: 1. Install Nginx and Apache; 2. Configure the Nginx agent; 3. Start Nginx and Apache; 4. Test the configuration to ensure that you can see Apache content after accessing the domain name. In addition, you need to pay attention to other matters such as port number matching, virtual host configuration, and SSL/TLS settings.

How to create a mirror in docker How to create a mirror in docker Apr 15, 2025 am 11:27 AM

Steps to create a Docker image: Write a Dockerfile that contains the build instructions. Build the image in the terminal, using the docker build command. Tag the image and assign names and tags using the docker tag command.

How to start nginx server How to start nginx server Apr 14, 2025 pm 12:27 PM

Starting an Nginx server requires different steps according to different operating systems: Linux/Unix system: Install the Nginx package (for example, using apt-get or yum). Use systemctl to start an Nginx service (for example, sudo systemctl start nginx). Windows system: Download and install Windows binary files. Start Nginx using the nginx.exe executable (for example, nginx.exe -c conf\nginx.conf). No matter which operating system you use, you can access the server IP

How to start containers by docker How to start containers by docker Apr 15, 2025 pm 12:27 PM

Docker container startup steps: Pull the container image: Run "docker pull [mirror name]". Create a container: Use "docker create [options] [mirror name] [commands and parameters]". Start the container: Execute "docker start [Container name or ID]". Check container status: Verify that the container is running with "docker ps".

See all articles