.log

業務系ITナンデモ屋の日々得ては失われていく知識を書き留めておくメモ。
日記は苦手ですが将棋ネタなんかも書いています。内容は無保証・無責任です。

nginxでクッキーの値を条件に背後のサーバーを振り分ける


nginxのmapを使うと、HTTPヘッダー等の各変数をもとに upstream を振り分けることができます。

クッキー "target" の値が"1"、"2"、"3"、それ以外(未設定含む)の4通りの場合に応じて、バックエンドのサーバーを振り分けるサンプルは以下。
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 (=ランディングページ)の場合に専用のサーバーへ振り分けるようなことができます。

利用場面は限定的ですが、ズバリ当てはまる場合もあると思います。

コメントする

名前
 
  絵文字
 
 
記事検索
  • ライブドアブログ