やりたいこと
メンテナンスページで内部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;
}
}