こんなトリッキーなことしないほうが良い気もするけど。
ソースIPの指定はif $remote_addr で正規表現で書いてもいいけど、複数あると煩雑になるのでgeo使ったほうが楽ですね。
気をつけないといけないのはifのの中などでproxy_passを指定する場合は
URLの指定ができない(末尾に"/"つけてはいけない)ので設定を間違えるとエラーになること。
# nginx.conf
http {
# 略
geo $hoge {
default 0;
192.0.1.1 1;
192.0.2.0/24 1;
}
include vhosts.conf;
}
# vhosts.conf
server {
server_name example.com;
root /var/www/html;
# 略
location /hoge/ {
proxy_set_header X-Forwarded-Host $host;
if ($hoge) {
proxy_pass http://localhost:8080;
}
}
}
気をつけないといけないのはifのの中などでproxy_passを指定する場合は、URLの指定ができない(末尾に"/"つけてはいけない)ので設定を間違えるとエラーになること。
location /hoge/ {
proxy_set_header X-Forwarded-Host $host;
if ($hoge) {
proxy_pass http://localhost:8080/;
}
}
||<
>||
# nginx -t
nginx: [emerg] "proxy_pass" may not have URI part in location given by regular expression,
or inside named location, or inside the "if" statement, or inside the "limit_except" block
in /etc/nginx/vhosts/sample.conf:27
nginx: configuration file /etc/nginx/nginx.conf test failedなのでreverse proxyに投げるURLを変えたい場合はproxy_passの前に、rewriteを使ってURL変えないといけない。
location /hoge/ {
proxy_set_header X-Forwarded-Host $host;
if ($hoge) {
rewrite /hoge/(.*) /foo/$1 break;
proxy_pass http://localhost:8080/;
}
}