diff --git a/plugins/op_waf/waf/lua/common.lua b/plugins/op_waf/waf/lua/common.lua index c8488ce55..d831df170 100644 --- a/plugins/op_waf/waf/lua/common.lua +++ b/plugins/op_waf/waf/lua/common.lua @@ -121,6 +121,54 @@ function _M.read_file_table( self, name ) return self:select_rule(self:read_file('args')) end + +--------------------------------------------------- + +function _M.get_server_name(self) + local c_name = ngx.var.server_name + local my_name = ngx.shared.limit:get(c_name) + if my_name then return my_name end + local tmp = self:read_file_body(self.cpath .. 'domains.json') + if not tmp then return c_name end + local domains = json.decode(tmp) + for _,v in ipairs(domains) + do + for _,d_name in ipairs(v['domains']) + do + if c_name == d_name then + ngx.shared.limit:set(c_name,v['name'],3600) + return v['name'] + end + end + end + return c_name +end + + +function _M.get_client_ip(self) + local client_ip = "unknown" + if self.site_config[server_name] then + if self.site_config[server_name]['cdn'] then + for _,v in ipairs(self.site_config[server_name]['cdn_header']) + do + if request_header[v] ~= nil and request_header[v] ~= "" then + local header_tmp = request_header[v] + if type(header_tmp) == "table" then header_tmp = header_tmp[1] end + client_ip = split(header_tmp,',')[1] + break; + end + end + end + end + if string.match(client_ip,"%d+%.%d+%.%d+%.%d+") == nil or not self:is_ipaddr(client_ip) then + client_ip = ngx.var.remote_addr + if client_ip == nil then + client_ip = "unknown" + end + end + return client_ip +end + function _M.t(self) ngx.say(',,,') end diff --git a/plugins/op_waf/waf/lua/init.lua b/plugins/op_waf/waf/lua/init.lua index 3a7d53e68..1db603c33 100644 --- a/plugins/op_waf/waf/lua/init.lua +++ b/plugins/op_waf/waf/lua/init.lua @@ -33,58 +33,14 @@ C.setConfData(config, site_config) -function get_client_ip() - local client_ip = "unknown" - if site_config[server_name] then - if site_config[server_name]['cdn'] then - for _,v in ipairs(site_config[server_name]['cdn_header']) - do - if request_header[v] ~= nil and request_header[v] ~= "" then - local header_tmp = request_header[v] - if type(header_tmp) == "table" then header_tmp = header_tmp[1] end - client_ip = split(header_tmp,',')[1] - break; - end - end - end - end - if string.match(client_ip,"%d+%.%d+%.%d+%.%d+") == nil or not is_ipaddr(client_ip) then - client_ip = ngx.var.remote_addr - if client_ip == nil then - client_ip = "unknown" - end - end - return client_ip -end - - -function get_server_name() - local c_name = ngx.var.server_name - local my_name = ngx.shared.limit:get(c_name) - if my_name then return my_name end - local tmp = C:read_file_body(cpath .. 'domains.json') - if not tmp then return c_name end - local domains = json.decode(tmp) - for _,v in ipairs(domains) - do - for _,d_name in ipairs(v['domains']) - do - if c_name == d_name then - ngx.shared.limit:set(c_name,v['name'],3600) - return v['name'] - end - end - end - return c_name -end local args_rules = C:read_file_table('args') local retry = config['retry'] local retry_time = config['retry_time'] local retry_cycle = config['retry_cycle'] -local ip -local server_name +local ip = C:get_client_ip() +local server_name = string.gsub(C:get_server_name(),'_','.') @@ -253,7 +209,6 @@ function waf() -- server_name = string.gsub(get_server_name(),'_','.') ngx.header.content_type = "text/plain" - -- ip = get_client_ip() C:t() -- ngx.say(read_file('args')); -- args()