动态lua

1. 功能描述

该模块允许通过 /api/v1/config/http_lua 动态配置接口, 动态设置 content_by_lua_block 及 access_by_lua_block的内容。

同时配置access_by和content_by时,优先触发access_by内容。

2. 依赖模块

动态lua功能依赖模块:

load_module /usr/local/njet/modules/njt_http_lua_module.so;
load_module /usr/local/njet/modules/njt_http_dyn_lua_module.so;

特殊说明:njt_http_lua_module.so要在njt_http_lua_module.so上面。

3. 配置说明

load_module /usr/local/njet/modules/njt_http_lua_module.so;
load_module /usr/local/njet/modules/njt_http_dyn_lua_module.so;


http {
   ...
   server {
      
     lua_package_path "$prefix/lualib/lib/?.lua;/usr/local/njet/modules/?.lua;;";
     lua_package_cpath "$prefix/lualib/clib/?.so;;";
        ...
   }
}

4. 调用样例

4.1 API说明

查询接口:

GET http://IP+port/api/v1/config/http_lua

修改接口:

PUT http://IP+port/api/v1/config/http_lua

4.2 通过PUT接口添加动态lua

curl -X PUT http://127.0.0.1:8081/api/v1/http_lua -d'
{
    "servers": [
        {
            "listens": [
                "0.0.0.0:8080"
            ],
            "serverNames": [
                "localhost"
            ],
            "locations": [
                {
                    "location": "/",
                    "lua": {}
                },
                {
                    "location": "/test_lua",
                    "lua": {
                        "content_by": "njt.say(\"lua new test str\");",
                        "access_by": "njt.exit(njt.HTTP_FORBIDDEN);"
                    }
                }
            ]
        }
    ]
}

4.3 通过GET接口查看动态lua

curl -X GET http://127.0.0.1:8081/api/v1/http_lua 

{
    "servers": [
        {
            "listens": [
                "0.0.0.0:8080"
            ],
            "serverNames": [
                "localhost"
            ],
            "locations": [
                {
                    "location": "/",
                    "lua": {}
                },
                {
                    "location": "/test_lua",
                    "lua": {
                        "content_by": "njt.say(\"lua new test str\");",
                        "access_by": "njt.exit(njt.HTTP_FORBIDDEN);"
                    }
                }
            ]
        }
    ]
}