5 app_Mod - starjun/starjun.github.io GitHub Wiki

app_Mod 自定义规则(组)模块

动作支持:

  1. 普通规则的 :allow deny

  2. 其他规则:refile func log rehtml

  3. 已取消:relua reluastr

该模块在访问控制的第五步,是自定义高级规则控制

[
    {
        "state": "on",
        # 该条规则开关 (on/off)
        "action": ["deny"],
        # 执行动作:拒绝
        "hostname": ["101.200.122.200",""],
        # hostname 匹配条件,第一个参数:host名称,第二个:匹配方式
        "uri": ["^/([\\w]{4}\\.html|deny\\.do|你好\\.html)$","jio"]
        # uri 匹配条件
    },
    {
        "state": "on",
        "action": ["rehtml"],
        # 执行动作:返回自定义html
        "rehtml": "<html>hi~!</html>",
        # 自定义内容
        "hostname": ["101.200.122.200",""],
        "uri": ["/rehtml",""]
    },
    {
        "state": "on",
        "action": ["refile"],
        # 执行动作:返回自定义文件
        "refile": "2.txt",
        # 自定义文件名称
        "hostname": ["101.200.122.200",""],
        "uri": ["/refile",""]
    },
    {
        "state": "on",
        "action": ["deny"],
        "hostname": [["101.200.122.200","127.0.0.1"],"table"],
        # 匹配hostname规则,第一个参数:匹配host名称,第二个参数:匹配类型
        "uri": ["/api/.*","jio"],
        "app_ext":[
        ["ip",[["106.37.236.170","1.1.1.1"],"table",true]]
        # 第一个参数:匹配位置,第二个参数:匹配规则
        # 匹配规则:第一个参数:匹配内容,第二个:匹配方式,第三个:是否取反
        ]
    },    
    {
        "state": "on",
        "action": ["relua"],
        # 执行动作:自定义lua文件脚本
        "relua":"1.lua",
        # 自定义lua文件脚本文件 名称
        "hostname": ["127.0.0.1:5460",""],
        "uri": ["/relua",""]
    },
    {
        "state": "on",
        "action": ["relua_str"],
        # 执行动作:自定义luastr代码
        "relua_str":"local a = 1 if a<1 then ngx.say(1) end return 2",
        # 自定义luastr代码
        "hostname": ["127.0.0.1:5460",""],
        "uri": ["/relua",""]
    },    
    {
        "state": "on",
        "action": ["log"],
        # 执行动作:log记录
        "hostname": ["127.0.0.1:5460",""],
        "uri": ["/log",""]
    },
    {
        "state": "on",
        "action": ["deny"],
        "hostname": [["101.200.122.200","127.0.0.1"],"table"],
        "uri": ["/api/.*","jio"],
        "app_ext":[
        # 自定义规则组
        ["uri",["admin","in"],"or"],
        # 规则组第一个规则
        # 第一个参数:匹配位置,第二个参数:匹配规则,第三个:规则连接符(and/or 默认:and)
        # 匹配规则:第一个参数:匹配内容,第二个:匹配方式
        ["cookie",["c_test","jio"],"and"],
        ["ip",[["1.1.1.1","127.0.0.1"],"table",true],"and"]
        # 规则组第三条规则
        # 第一个参数:匹配位置,第二个参数:匹配规则,第三个:规则连接符
        # 匹配规则:第一个参数:匹配内容,第二个:匹配方式,第三个:是否取反
        ]
    },
    {
        "state": "on",
        "action": ["refile"],
        # 执行动作:自定义返回文件
        "refile": ["js_debug.txt","text/html"],
        # 第一个参数:返回文件名称,第二个:header头类型
        "hostname": ["localhost5460",""],
        "uri": ["/api/test/debug",""],
        "app_ext":[
        ["args",["true","@token@",["cctoken"],true]]
        # 第一个参数:匹配位置,第二个:匹配规则
        # 匹配规则:第一个参数:匹配内容,第二个:匹配方式,第三个:匹配名称和位置,第四个:是否取反
        ]
    },
    {
        "state": "on",
        "action": ["refile"],
        "refile": ["js_time.txt","text/html"],
        "hostname": ["localhost5460",""],
        "uri": ["/api/test/time",""],
        "app_ext":[
        ["args",["^[\\w]{6}$","jio",["cc",3],true]]
        # 第一个参数:匹配位置,第二个:匹配规则
        # 匹配规则:第一个参数:匹配内容,第二个:匹配方式,第三个:匹配名称和位置,第四个:是否取反
        ]
    },
    {
        "state": "on",
        "action": ["deny"],
        "post_form":1024,
        "hostname": ["localhost5460",""],
        "uri": ["/api/test/debug",""],
        "app_ext":[
        ["post_form",["\\.(jpg|jpeg|png|webp|gif)$","jio",["image0",2],true],"or"],
        # 第一个参数:匹配位置,第二个:匹配规则
        # 匹配规则:第一个参数:匹配内容,第二个:匹配方式,第三个:匹配名称和位置,第四个:是否取反
        ["post_form",["(;|-|/)","jio",["image0",2],false],"or"]
        # 第一个参数:匹配位置,第二个:匹配规则
        # 匹配规则:第一个参数:匹配内容,第二个:匹配方式,第三个:匹配名称和位置,第四个:是否取反
        ]
    },
    {
        "state": "on",
        "action": ["func"],
        "func": ["sign_generate",["h_sign","md5",["$uri","$http_time","isdifasdfksf"]]],
        "hostname": ["localhost5460",""],
        "uri": ["/api/test/time",""]
    }
]

数据请求样式

URI: http://%ip:%port/api/v2/config_dict

查询操作:

1:查询所有

GET/POST querystring:
   action=get&mod=app_Mod

2:查询指定id (支持子节点查询,eg: 1@state)

GET/POST querystring:  
   action=get&mod=app_Mod&id=1
   action=get&mod=app_Mod&id=1@state

设置操作:

1:修改整体

GET/POST querystring:
   action=set&mod=app_Mod&value=
[
    {
        "state": "on",
        "action": ["deny"],
        "hostname": ["101.200.122.200",""],
        "uri": ["^/([\\w]{4}\\.html|deny\\.do|你好\\.html)$","jio"]
    },
    {
        "state": "on",
        "action": ["rehtml"],
        "rehtml": "<html>hi~!</html>",
        "hostname": ["101.200.122.200",""],
        "uri": ["/rehtml",""]
    }
]

2:修改单个

GET/POST querystring:
   action=set&mod=app_Mod&id=1&value_type=json&value=
{
        "state": "on",
        "action": ["relua"],
        "relua":"1.lua",
        "hostname": ["127.0.0.1:5460",""],
        "uri": ["/relua",""]
 }

删除操作:

1:删除单个

GET/POST querystring: 
   action=del&mod=app_Mod&id=1

添加操作:

1:添加单个

GET/POST querystring: 
   action=add&mod=app_Mod&value=
{
        "state": "on",
        "action": ["relua"],
        "relua":"1.lua",
        "hostname": ["127.0.0.1:5460",""],
        "uri": ["/relua",""]
 }

返回消息:

   服务器失败:http code ~= 200
   服务器成功:{code="ok/error",msg=...}
   code = error ,执行状态错误,msg 为错误内容
⚠️ **GitHub.com Fallback** ⚠️