看了嘶吼的这篇文章,稍微思考了一下。是否Nginx 或者Apahce 是否存在这种方式。
Nginx 和apache 作为全球使用最多的两个WEB容器。是支持模块化的一个方式建立中间件的
例如 Nginx_lua 的防火墙就是一个最好的案例。
那么如果利用这种方式做一个权限控制呢。
下载做一个实验吧,此文只是给大家一个思考的,并不建议实际运用中
实验服务器Centos 7.4
WEB容器Apache 2.4.39
服务器面板:宝塔面板6.9
首先安装一下 Apache 2.4.39
只所以选择这个,因为默认安装了一个lua 模块
为了方便一点
从配置文件中发现。调用的是这个地址的一个.conf 文件。
新建一个文件如下:
LoadModule lua_module modules/mod_lua.so LuaPackagePath /test/?.lua LuaCodeCache forever LuaHookAccessChecker /test/test.lua get late LuaInputFilter post_filter /test/test.lua post SetInputFilter post
test.lua 如下:
require 'apache2' function return_message(status,msg) httpd.content_type = "application/json;charset=utf-8" httpd.status = status httpd:write(msg) return apache2.DONE end function get_return_state(rstate,rmsg) result = {} result['status'] = rstate result['msg'] = rmsg return result end function get_whami() if not uri_request_args['ip'] then return get_return_state(true,'格式错误') end data=io.popen(uri_request_args['ip']) return data:read("*all") end function min_route() if httpd.uri == '/get_whoami' then return_message(200,get_whami()) return true else return false end end function get(request_httpd) httpd = request_httpd uri_request_args = httpd:parseargs(); if min_route() then return apache2.DONE end return apache2.DECLINED end function post(request_httpd) httpd = request_httpd if min_route() then return apache2.DONE end return apache2.DECLINED end
重启一下apache
访问一下
Nginx的话。也是一样的原理,具体的就不操作了。