我有一個應用程序運行在nginx後面。爲了讓客戶添加相同主機根據自己的工具,我們使用location
排序是這樣的:如何在nginx中創建自定義位置?
location /some-extension {
rewrite ^/(.*) /$1 break;
proxy_pass http://customers-app/$1/$args;
}
現在,我想使這個充滿活力,從而使得給用戶可以創建零個或多個這樣的位置。由於該應用程序是通過Docker部署的,因此無法手動編輯nginx配置。
Nginx的編譯使用Perl和Lua支持,所以我想是這樣的:
- 使用環境現狀變量的形式
path1 url1 path-2 url2 ... pathn urln
上配置外部工具。 - 在特殊的
location
配置中,將請求URL的第一個路徑段與環境變量匹配,並將proxy_pass
與相應的URL匹配(如果找到)。
到目前爲止,這是我所:
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
';
}
我知道我不應該使用content_by_lua
但似乎排序工作。問題是我怎麼能得到這個proxy_pass
到指定的網址?