GOOGLE ADS

вторник, 26 апреля 2022 г.

Nginx: отправка запроса на несколько конечных точек

Моя цель - удалить файл с других серверов, поэтому мне нужно одновременно отправить запрос на эти конечные точки.

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

Любое предложение будет полезно


Решение проблемы

Вот пример того, что я предлагал:

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немного упростить конфиг. Если вам нужно использовать какой-то конкретный метод HTTP-запроса (например DELETE, ), см. главу документации по константам метода HTTP.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...