LINUX.ORG.RU
ФорумAdmin

В nginx попасть в нужный upstream

 , ,


0

2

Нужно по запросу, например http://example.com/?port=8082 попасть на 127.0.0.1:8082

upstream nodes {
    server 127.0.0.1:8082;
    server 127.0.0.1:8083;
    server 127.0.0.1:8084;
    server 127.0.0.1:8085;
}

location / {
  proxy_pass http://nodes;
}



Есть какой то sticky, но мне не удалось его завести. Насколько я понял он доступен только в комм. версии nginx?

Другие примеры только тупо так
if ($request ~ "8082") {

  proxy_pass http://127.0.0.1:8082;

}

if ($request ~ "8083") {

  proxy_pass http://127.0.0.1:8083;

}

...


Но как то коряво мне кажется. Как сделать четко? Вообще хотелось бы конечно ещё чтобы списочек upstream удаленно брался, но опять же в коммерческой версии это?

★★★★

Какую задачу пытаетесь решить?

Вот так, например, все запросы с хоста 192.168.16.2 будут попадать на конкретный upstream:

geo $nodes {
  default prod;
  192.168.16.2 test;
}

upstream prod {
    server 127.0.0.1:8082;
    server 127.0.0.1:8083;
    server 127.0.0.1:8084;
    server 127.0.0.1:8085;
}

upstream test {
    server 127.0.0.1:8082;
}

server {
 ...
 location / {
  proxy_pass http://$nodes;
 }
 ...
}

DiMoN ★★★
()
Ответ на: комментарий от DiMoN

Да, такой вариант это понятно, но хотелось бы не разделять upstreamЫ, а в контексте одного роутинг делать... Но если так нельзя, то нельзя.

gobot ★★★★
() автор топика

это в контексте http

map $arg_port $upstream_by_port {

default 127.0.0.1:8082; # если порт не указан либо указано не то что надо

8083 127.0.0.1:8083;

8084 127.0.0.1:8084;

8085 127.0.0.1:8085;

}

далее в контексте server

location / {

proxy_pass http://$upstream_by_port;

}

директива upstream не нужна при таком маппинге

anonymous
()