やりたいこと
メンテナンスページで内部IPからのみとかで分岐したい
環境
- nginx
nginxがgeoモジュールに対応しているビルドである必要がある
nginx -V |grep with-http_geoip_module
でなにか表示されれば対応済み なければ無理 ただapt経由でインストールしても対応していたので、デフォルトで有効だと思われる
設定
例えば以下の2つのアクセス先があったとして、通常は192.168.1.100へ飛ばしたいけど、特定のIPアドレス(仮に8.8.8.8とする)からのアクセスは192.168.1.200にしたいとする。
まず2つのサーバーを定義
upstream normal_server { server 192.168.1.100; } upstream test_server { server 192.168.1.200; }
次に条件分岐したいIPアドレスの条件を書く。
geo $allow_ip { default 0; # 許可したいIPアドレスの帯域 8.8.8.8/32 1; }
で、最後にそれに基づく条件式を書く
server { if ($allow_ip = 0) { set $target_proxy_server "normal_server"; } if ($allow_ip = 1) { set $target_proxy_server "test_server"; } location / { proxy_pass http://$target_proxy_server; } }