看了嘶吼的这篇文章,稍微思考了一下。是否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的话。也是一样的原理,具体的就不操作了。
点击收藏 | 2
关注 | 2