私は非常に大きな画像ギャラリーを運営しており、毎日Webコピー機を使用してサイト全体をダウンロードすることで膨大な量のトラフィックを生み出している5人の訪問者がいます。それらの訪問者は、見たところ静的IPを持っています。私が達成したいのは、これらの5つのIPが、サイトにアクセスするとすぐに、特定のページ(動作に問題がある理由を説明する)にリダイレクトされることです。他のすべての訪問者は通常どおりサイトを閲覧できるはずです。
サーバーはウェブサーバーとしてCentOS(5.8)とnginx(1.0.15)を実行しています。あなたが知っているnginx.confのエントリによってこれを達成する方法はありますか?
ヒントとサポートをよろしくお願いします!
敬具-アレックス
Geo モジュールは、クライアントアドレスを照合するために作成されます。これを使用して、次のようにテストする変数を定義できます。
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に対して正規表現を実行するよりも効率的で、保守が簡単です。
HttpAccessModule を使用すると、これをすばやく実現できます。
server {
if ($remote_addr = 1.2.3.4) {
rewrite ^ http://www.website.com/noscrape.htm;
}
...
}
同じドメインの別のページにリダイレクトした場合、上記の例に従っていると、直接ループが発生します。 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の誰かが、サイトにリストされていない警告ページ以外のページにアクセスした場合、警告ページにリダイレクトされます。書き換えは場所/ブロック内にあるため、リダイレクトループは発生しません。ただし、サーバーブロック内にある場合は、リダイレクトループが発生します。