我的目標是從另一臺服務器上洗掉一個檔案,因此我需要同時將請求分派到這些端點。
location / {
set_by_lua_block $url_format {
.. block lua for string manipulation and constructing which return as example '/images/test.png'
}
set $cdn1 "http://server1.com";
set $cdn2 "http://server2.com";
proxy_set_header Host main-server.com;
proxy_pass $cdn1$url_format;
proxy_pass $cdn2$url_format;
}
執行時,我收到錯誤:
"proxy_pass" directive is duplicate
任何建議都會有所幫助
uj5u.com熱心網友回復:
這是我建議的一個例子:
location / {
set_by_lua_block $url_format {
-- block lua for string manipulation and constructing which return as example '/images/test.png'
}
# variables should be pre-initialized
set $cdn '';
set $url '';
content_by_lua_block {
local cdns = { "http://server1.com", "http://server2.com" }
local reqs = {}
for _, cdn_name in ipairs(cdns) do
table.insert(reqs, { "/dispatcher", { vars = { cdn = cdn_name, url = ngx.var.url_format } } })
end
local resps = { ngx.location.capture_multi(reqs) }
-- analyze 'resps' table here, generate response (see ngx.say, ngx.exit functions)
}
}
location /dispatcher {
internal;
resolver 8.8.8.8; # use any resolver that is able to resolve server1.com, server2.com etc.
proxy_pass $cdn$url;
}
請參閱這篇文章了解為什么您需要一個resolver指令。很可能您可以將代碼從 移動set_by_lua_block到content_by_lua_block以稍微簡化配置。如果您需要DELETE使用某些特定的 HTTP 請求方法(例如 ),請參閱HTTP 方法常量檔案一章。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/461679.html
上一篇:如何僅為根路徑配置快取回應標頭?
