页面代理插件
页面代理插件主要用于tl-ops-manage内部静态页面路径处理,如管理控制台页面,官网页面。
其实现方式通过在set阶段指定变量名称,在 tl_ops_process_before_init_rewrite
阶段执行变量赋值,从而转向访问具体内部地址。
为什么要动态地址? 我个人的考虑有以下几点
方便统一配置
最初的设计是在nginx.conf中配置每个静态模块的页面地址。而项目地址在 tl_ops_manage_env.lua
中也有一份相关配置,导致配置分散,不统一。
统一后的配置,项目路径统一在全局配置文件中 tl_ops_manage_env.lua
管理,由插件读取配置文件进行动态转发静态页面地址。
方便权限控制
在一些情况下,可能会需要限制某些ip,或者达到某些条件才能访问管理控制台,而如果直接在传统的location块下,可能会这样实现
location xxx {
root /path/to/xxx;
deny xxxx;
allow all;
}
这种如果需要进行动态变更ip的话,需要调整到对应的conf。如果用插件的形式动态调整的话,只需要后续在插件上补充一些限制ip的代码逻辑,并提供可视化操作即可
动态调整路径
还有一个好处就是支持动态调整静态资源路径,v-3.3.0以上已支持动态配置静态资源路由
实现
# 代码位置 : plugins/tl_ops_page_proxy/tl_ops_plugin_core.lua
-- 页面转发插件实现
function _M:tl_ops_process_before_init_rewrite(ctx)
local request_uri = utils:get_req_uri()
if ngx.re.find(request_uri, "/tlopsmanage/", 'jo') then
ngx.var.tlopsmanage = env.path.tlopsmanage
end
if ngx.re.find(request_uri, "/website/", 'jo') then
ngx.var.website = env.path.website
end
return true, "ok"
end