diff --git a/src/provider.lua b/src/provider.lua index 2ea8547ef..0f50fbcd7 100644 --- a/src/provider.lua +++ b/src/provider.lua @@ -131,7 +131,7 @@ local function get_debug_value() end end -function _M.find_service(host) +local function find_service_strict(host) for _,service in ipairs(_M.services or {}) do for _,_host in ipairs(service.hosts or {}) do if _host == host then @@ -141,6 +141,29 @@ function _M.find_service(host) end end +local function find_service_cascade(host) + local request = ngx.var.request + for _,service in ipairs(_M.services or {}) do + for _,_host in ipairs(service.hosts or {}) do + if _host == host then + local usage, matched_patterns = service:extract_usage(request) + + if next(usage) and matched_patterns ~= '' then + return service + end + end + end + end + + return find_service_strict(host) +end + +if os.getenv('APICAST_PATH_ROUTING_ENABLED') then + _M.find_service = find_service_cascade +else + _M.find_service = find_service_strict +end + local http = { get = function(url) ngx.log(ngx.INFO, '[http] requesting ' .. url)