http {
proxy_cache_path /path/to/cache keys_zone=my_cache:100m;
}
upstream external_api {
}
upstream backend1 {
}
upstream backend2 {
}
location / {
set $chosen_backend '';
set $reqeust_uri '';
access_by_lua_block {
local json = require 'cjson'
local lua_request_uri = '/api/v1/searchterm' .. ngx.var.arg_searchterm
api_response = ngx.location.capture('/external_api', {
vars = {
request_uri = lua_request_uri
}
})
response_json = json.decode(api_response)
if response_json['result'] then
ngx.var.chosen_backend = 'backend1'
else
ngx.var.chosen_backend = 'backend2'
end
}
proxy_pass https://$chosen_backend;
}
location /external_api {
internal;
proxy_cache my_cache;
proxy_cache_key $uri;
proxy_cache_valid 200 5m;
}