У меня есть сценарий, в котором я хочу proxy_pass
запросов к одному из нескольких мест назначения в восходящем направлении на основе значения, которое может появиться в заголовке или в качестве параметра запроса.
Прямо сейчас у меня есть отображение на основе заголовка, в основном выясненное:
map $http_x_destination $destination {
default upstream0;
something upstream1;
something2 upstream1;
something3 upstream2;
}
...
server {
location / {
proxy_pass https://$destination;
}
}
Очевидно, что это хорошо работает для случаев, когда у нас есть заголовок, но не для тех случаев где цель основана на операции. Моим первоначальным инстинктом было бы использовать некий условный лог c, чтобы увидеть, присутствует ли заголовок, и построить карту на основе $http_x_target
, если он есть, или $arg_target
вместо этого.
Но я читал множество призывов не использовать if
, поскольку это считается опасным, и, поскольку я не знаю, как nginx вообще обрабатывает определения определений (не говоря уже о if
блоков), я с подозрением отношусь к такому подходу.
Есть ли хороший способ объединить эти два источника информации для точного сопоставления их значений с восходящими потоками?