Nginx-特定のIPを持つユーザーを特別なページにリダイレクトする方法


26

私は非常に大きな画像ギャラリーを運営しており、ウェブコピー機を使用して毎日サイト全体をダウンロードすることで膨大な量のトラフィックを作成する5人の訪問者がいます。これらの訪問者は、見かけ上静的IPを持っています。私が達成したいのは、サイトにアクセスするとすぐに、これら5つのIPが特定のページにリダイレクトされることです(これにより、その動作に問題がある理由が説明されます)。他のすべての訪問者は、通常どおりサイトを閲覧できるはずです。

サーバーはWebサーバーとしてCentOS(5.8)およびnginx(1.0.15)を実行しています。あなたが知っているnginx.confのエントリによってこれを達成する方法はありますか?

ヒントとサポートをありがとうございました!

敬具-アレックス

回答:


34

ジオモジュールは、クライアントのアドレスと一致するように作られています。これを使用して、次のようにテストする変数を定義できます。

geo $bad_user {
  default 0;
  1.2.3.4/32 1;
  4.3.2.1/32 1;
}

server {
  if ($bad_user) {
    rewrite ^ http://www.example.com/noscrape.html;
  }
}

これは、$ remote_addrに対して正規表現を実行するよりも効率的であり、保守が容易です。


どうもありがとうございました-geoを使用するとうまくいきます!ただ一つ:リクエストをdomain.comにリダイレクトするだけで、domain.com / file.extやdomain.com/subdirectory/file.extのようなダイレクトリクエストはリダイレクトしません。どうすればこれを達成できますか?残念ながら、私はかなり正規表現の初心者です。:(
アレックス

ifをどこに置きましたか?サーバーブロック全体を提供できますか?さらに考えた後、/ noscrape.htmlへのリクエストに対しても評価されるため、サーバーにifを直接配置することは最良のアイデアではありません
-kolbyjack

20

HttpAccessModuleを使用すると、これをすばやく実行できます。

server {
    if ($remote_addr = 1.2.3.4) {
        rewrite ^ http://www.website.com/noscrape.htm;
    }
   ...
}

カレド、どうもありがとう!そのディレクティブにいくつかのIPを含める方法はありますか?
アレックス

申し訳ありませんが、少し混乱しています(ここで新規)-マットは質問に答えましたか、それともKhaledですか?しかし、あなたの両方に感謝します!;)
アレックス

1
これは実際にRewriteモジュールを使用します。次のような正規表現の一致を使用できますif ($remote_addr ~ "^(1.2.3.4|4.3.2.1)$")
mgorven

nginx -Vは、そのようなモジュールはないと言いますが、機能します。多分それは今のところ組み込まれています。
user3132194

1

同じドメイン内の別のページにリダイレクトした場合、上記の例を実行した場合、直接ループが発生します。あなたのnginx設定ファイルでは、次のように使用します(広く使用されているため、wordpressを使用すると仮定します)

geo $bad_user {
  default 0;
  1.2.3.4/32 1;
  4.3.2.1/32 1;
}

server {
 location /
 {
  if ($bad_user) {
    rewrite ^ http://www.example.com/warning-page/ break;
  }

try_files $fullurl${request_uri}index.html $uri $uri/ /index.php$is_args$args;
 }

location /warning-page/
{
try_files $fullurl${request_uri}index.html $uri $uri/ /index.php$is_args$args;
}

}

ブラックリストに登録されたIPの誰かが、サイトにリストされていないwarning-page以外のページにアクセスした場合、警告ページにリダイレクトされます。書き換えは場所/ブロックにあるため、リダイレクトループは発生しません。ただし、サーバーブロック内にある場合、リダイレクトループが発生します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.