nginxのmapを使うと、HTTPヘッダー等の各変数をもとに upstream を振り分けることができます。
クッキー "target" の値が"1"、"2"、"3"、それ以外(未設定含む)の4通りの場合に応じて、バックエンドのサーバーを振り分けるサンプルは以下。
HTTPヘッダーというかnginxの各変数を用いることで、いろいろな条件付けができます。(nginxのドキュメント)
mapの条件値(上で言う、1、2、3、default)のところには、正規表現が利用できるため、例えばリファラーが google (=ランディングページ)の場合に専用のサーバーへ振り分けるようなことができます。
利用場面は限定的ですが、ズバリ当てはまる場合もあると思います。
http {
:
(各種設定)
:
upstream b1 {
server mybackend-server1; # "1"が設定されている場合の振り分け先
}
upstream b2 {
server mybackend-server2; # "2"が設定されている場合の振り分け先
}
upstream b3 {
server mybackend-server3; # "3"が設定されている場合の振り分け先
}
upstream bX {
server mybackend-serverX; # それ以外(未設定含む)が設定されている場合の振り分け先
}
map $cookie_target $server { # "$cookie_" の後にクッキー名を書く。
# $serverはupstreamが格納される先
1 b1; # "1"のときはupstream b1を利用
2 b2; # "2"のときはupstream b2を利用
3 b3; # "3"のときはupstream b3を利用
default bX; # どれにも該当しないときはupstream bXを利用
}
server {
:
(各種設定)
:
location / {
proxy_pass http://$server; # 上記の条件により決定されたupstreamを利用
}
}
HTTPヘッダーというかnginxの各変数を用いることで、いろいろな条件付けができます。(nginxのドキュメント)
mapの条件値(上で言う、1、2、3、default)のところには、正規表現が利用できるため、例えばリファラーが google (=ランディングページ)の場合に専用のサーバーへ振り分けるようなことができます。
利用場面は限定的ですが、ズバリ当てはまる場合もあると思います。