nginx
GoogleCloudPlatform

GCPのLB経由のNginxでアクセス元IPによるアクセス制限

背景

  • GCPのLB配下で特定パス以下の場合のみアクセス元IPでアクセス制限したかった
  • ELB同様、GCPのLBの経由の場合はIPがLBのものになってしまうので xxx.xxx.xxx.xxx allow は使えない
  • 調べたらif分でゴリッと実装してる場合が多かった
  • もっといい方法合ったら知りたい

実装(nginx.conf)

  # アクセス許可するアクセス元IPであれば$allowedに'allow'を代入。そうでなければ、deny。
  map $http_x_forwarded_for $allowed {
        default deny;
        ~\s*127.0.0.*$  allow; # 127.0.0.0/24 のアクセスを許可 
  }

  location / { 
           略 
    }

  # $allowedが'deny'の場合は403を返す
  location /some_path/ {
     if ( $allowed = "deny" ) {
        return 403 ;
     }

    proxy_pass http://unicornapp;
  }

参考

http://d.hatena.ne.jp/end0tknr/20150618/1434608411
https://gist.github.com/mosson/7008082
http://takeyuweb.hatenablog.com/entry/elb_ec2_nginx_ip