in scripts/lua/policies/backendRouting.lua [72:100]
function _M.setDynamicRoute(obj)
local whitelist = obj.whitelist
for k in pairs(whitelist) do
whitelist[k] = whitelist[k]:lower()
end
local header = obj.header ~= nil and obj.header or 'X-Cf-Forwarded-Url'
local dynamicBackend = ngx.req.get_headers()[header]
if dynamicBackend ~= nil and dynamicBackend ~= '' then
local u = url.parse(dynamicBackend)
if u.scheme == nil or u.scheme == '' then
u = url.parse(utils.concatStrings({'http://', dynamicBackend}))
end
if utils.tableContains(whitelist, u.host) then
ngx.req.set_uri(_M.getUriPath(u.path))
local split = {string.match(dynamicBackend, '([^?]*)?(.*)')}
local qs = split[2]
if qs ~= nil then
ngx.req.set_uri_args(qs)
end
setUpstream(u)
else
request.err(403, 'Dynamic backend host not part of whitelist.')
end
else
logger.info('Header for dynamic routing not found. Defaulting to backendUrl.')
end
end