nginx を用いて Cloudflare 経由のアクセスを IPアドレス で振り分ける方法

結論

以下のように $http_x_forwarded_for で判別するように書きます。これにより、123.123.123.123 からのアクセスは Amazon にリダイレクトされ、それ以外からのアクセスは Google にリダイレクトされます*1

server {
(省略)

  location / {
    if ($http_x_forwarded_for = "123.123.123.123") {
      return 301 https://www.amazon.co.jp;
      break;
    }
    return 301 https://www.google.co.jp;
(省略)

注意点

公式ドキュメント に書いてあるように、X-Forwarded-For ヘッダは 123.123.123.123 の書式で固定ではありません123.123.123.123,111.111.111.111,222.222.222.222 のように連結される可能性があります*2。この場合は nginx の if の判定において ~ を使うなどして対応するとよいかと思います。

参考

*1:301 にするとあとから修正しても Webブラウザ が永続的にリダイレクトしてしまうので、それを避けたいならば 302 で

*2:プロキシ使用時など

Powered by はてなブログ