nginx で特定のIPのみ別の upstream を使う

この記事はWanoグループ Advent Calendar 2016の17日目の記事…が書かれなかったので代理で埋められた記事です。

例えば、新しい機能をリリースするが、一度、関係者のみ本番リリースしたいようなとき。
現状の設定が以下のようになっているなら、

upstream backend_server {
  server 192.168.0.1:8000;
}

location / {
  proxy_pass http://backend_server;
}

次のように変更する。

upstream backend_server {
  server 192.168.0.1:8000;
}
# テスト用のアップストリーム を設定する
upstream backend_server_test {
  server 192.168.0.2:8000;
}
set $backend_server 'backend_server';
if ($http_remote_addr = '192.168.0.5') {
  set $backend_server 'bakcend_server_test';
}

location / {
  # proxy_pass には変数で渡す
  proxy_pass http://$backend_server;
}

このようにすると、REMOTE_ADDRが192.168.0.5の場合のみ、backend_server_test がバックエンドとして使われ、それ以外の場合は、今までと同様、backend_server が使われます。

nginx の設定は柔軟でいいですねー。

Read More