J'ai une application fonctionnant derrière nginx. Pour permettre aux clients d'ajouter leurs propres outils sous le même nom d'hôte, nous utilisons une sorte location
de comme ceci:Comment puis-je créer des emplacements personnalisés dans nginx?
location /some-extension {
rewrite ^/(.*) /$1 break;
proxy_pass http://customers-app/$1/$args;
}
Maintenant, je voudrais faire cette dynamique de sorte qu'un client donné peut créer zéro ou plusieurs de ces endroits. Puisque l'application est déployée avec Docker, cela ne peut pas être fait manuellement en éditant la configuration de nginx.
Nginx est compilé avec perl et le soutien de lua, donc je pensais à quelque chose comme ceci:
- utiliser une variable evironment sur le formulaire
path1 url1 path-2 url2 ... pathn urln
pour configurer un outil externe. - Dans une configuration spéciale
location
, faites correspondre le premier segment de chemin de l'URL de la requête avec la variable d'environnement etproxy_pass
à l'URL correspondante si elle est trouvée.
Jusqu'à présent, voici ce que j'ai:
location/{
content_by_lua '
local target_path = ngx.var.uri;
local name = nil
if target_path:len() > 0 then
startAt = target_path:find("/") + 1
endAt = target_path:find("/", startAt) - 1
name = target_path:sub(startAt,endAt)
ngx.say(name)
end
if name then
local custom_proxies = os.getenv("CUSTOM_PROXIES");
inString = custom_proxies:find("another ")
if not inString then
ngx.say("not in string")
else
startAt = custom_proxies:find(" ", inString + 1) + 1
endAt = custom_proxies:find(" ", startAt)
url = custom_proxies:sub(startAt,endAt)
ngx.say(url)
end
end
';
}
Je sais que je ne devrais pas être en utilisant content_by_lua
mais il semble genre de travail. La question est comment puis-je obtenir ceci à proxy_pass
à l'URL indiquée?