web-dev-qa-db-ja.com

人間が行くことができる特定の立ち入り禁止URLの複数の条件でnginxの「良い」ボットをブロックする

2日間の検索/試行/失敗の後、これをここに投稿することにしましたが、同じことをしている人の例は見つかりませんでした。 robots.txtファイルを尊重しないボットに403を送信しようとしています(数回ダウンロードした後でも)。具体的にはGooglebotです。次のrobots.txt定義をサポートします。

User-agent: *
Disallow: /*/*/page/

その目的は、Googleがサイトで見つけたものをすべて閲覧できるようにすることですが、次のタイプのリクエストに対して403を返します。 Googlebotは、これらのリンクを永遠にネストし続け、ブロックごとにページングブロックを追加しているようです。

my_domain.com:80 - 66.x.67.x - - [25/Apr/2012:11:13:54 +0200] "GET /2011/06/
page/3/?/page/2//page/3//page/2//page/3//page/2//page/2//page/4//page/4//pag
e/1/&wpmp_switcher=desktop HTTP/1.1" 403 135 "-" "Mozilla/5.0 (compatible; G
ooglebot/2.1; +http://www.google.com/bot.html)"

これはwordpressサイトです。robots.txt情報が通過した後、しばらく停止して後で再びクロールを開始したとしても、これらのページを表示したくありません。止まることはありません....実際の人にこれを見てもらいたいです。ご覧のとおり、googleは403を取得しますが、ブラウザでこれを自分で試すと404が返されます。ブラウザを通過させたいです。

root@my_domain:# nginx -V
nginx version: nginx/1.2.0

マップとプレーンな古いnonoifを使用して、さまざまなアプローチを試しましたが、どちらも同じように動作します:( httpセクションの下)

 map $ http_user_agent $ is_bot {
 default 0; 
 〜crawl | Googlebot | Slurp | spider | bingbot | tracker | click | parser | spider 1; 
} 

(サーバーセクションの下)

 location〜 /(\ d +)/(\ d +)/ page /{
if($ is_bot){
 return 403; #robots.txtファイルを尊重してください!
} 
} 

私は最近、クライアントのためにApacheスキルを磨く必要がありました。そこでは、次のようにほぼ同じことを行いました。

#実際のエンジンをブロックし、robots.txtを尊重せず、正しい呼び出しを許可します
#Google 
 RewriteCond%{HTTP_USER_AGENT} ^ Mozilla/5\.0\\(compatible;\Googlebot/2 \。[01];\\ + http:// www\.google\.com/bot\.html \)$ [NC、OR] 
#Bing 
 RewriteCond %{HTTP_USER_AGENT} ^ Mozilla/5\.0\\(compatible;\bingbot/2 \。[01];\\ + http:// www\.bing\.com/bingbot\.htm \)$ [NC 、OR] 
#msnbot 
 RewriteCond%{HTTP_USER_AGENT} ^ msnbot-media/1 \。[01]\\(\ + http:// search\.msn\.com/msnbot\.htm \)$ [NC、OR] 
#Slurp 
 RewriteCond%{HTTP_USER_AGENT} ^ Mozilla/5\.0\\(compatible;\Yahoo!\ Slurp;\http:// help\.yahoo\.com/help/us/ysearch/Slurp \)$ [NC] 
 
#すべてのページ検索をブロックし、残りは合格する可能性があります
 RewriteCond%{REQUEST_URI } ^(/ [0-9] {4}/[0-9] {2}/page /)[OR]

#またはwpmp_switcher = mobileパラメーターセット
 RewriteCond%{QUERY_STRING} wpmp_switcher = mobile 
 
#ISSUE 403/SERVE ERRORDOCUMENT 
 RewriteRule。*-[F、L] [._ ___。]#一致する場合は終了

これは私がnginxに依頼したよりも少し多くのことをしますが、それはほぼ同じ原理であり、nginxについてこれを理解するのに苦労しています。

だから私の質問は、なぜnginxが私のブラウザに404を提供するのかということです。なぜ合格しないのですか、正規表現が私のUAと一致していません:

"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.30 Safari/536.5"

UAだけに基づいてブロックする例はたくさんあり、それは簡単です。また、マッチインの場所が最終的なもののようです。通常のユーザーにとっては「失敗」ではありません。これは、ブラウザで取得した404と何らかの相関関係があると確信しています。

何よりも重要なのは、Googleにパラメータwpmp_switcher = mobileを無視してもらいたいことです。wpmp_switcher= desktopは問題ありませんが、同じコンテンツが複数回クロールされることは望ましくありません。

グーグルウェブマスターツールページを介してwpmp_switcher = mobileを追加することになったにもかかわらず(サインアップする必要があります....)。それもしばらくの間停止しましたが、今日、彼らはモバイルセクションをスパイダーバックしています。

つまり、nginxがrobots.txtの定義を適用する方法を見つける必要があります。誰かが彼らの人生の数分をシェルアウトして、私を正しい方向に押してくれますか?

私は本当に感謝しています[〜#〜] any [〜#〜]私を難しく考える応答;-)

1
Glenn Plas

この問題の最善の解決策は、複数のことを含むことだと思います。それらのどれもボットをブロックすることを含みません。

  1. そもそもWordPressが無効なURLを生成しないようにします。

    これらのURLが生成された原因を特定し、問題を修正します。

  2. URLが正常に書き換えられるかどうかを判断します。もしそうなら、WordPress 301リダイレクトを送信してください。

    これらのURLの一部では、301を送信して正規URLにリダイレクトできる場合があります。ただし、他の人にとっては、URLがまったく意味をなさないため、それほど簡単ではありません。

    最近のバージョンのWordPressは一部のページに301リダイレクトを送信しますが、 Permalink Redirect のようなプラグインは、WordPressがしないことをカバーするのに役立ちます't。(このプラグインは更新またはカスタマイズが必要な場合があります。最初に慎重にテストしてください。)

  3. 意味のないURLの場合は、 41 を提供します。

    410 Gone HTTP応答は、URLが存在せず、戻ってくることはないことをリクエスターに通知するため、要求を停止します。検索エンジンはこのデータを使用して、インデックスから無効なURLを削除できます。

    それを行うべきサンプル構成は次のとおりです(最初にこれをテストしてください!):

    location ~ #/page/\d+/page/# {
        return 410;
    }
    
1
Michael Hampton

最初の定義は、User-agent:GooglebotではなくUser-agent:*の下に置いたため、機能しなかったと思います。少なくとも、それが私の不許可の声明に違いをもたらしたようです。図に行きます。

Robots.txtのUser-agentの下に次を追加しました:Googlebot

許可しない:/ *?

これはおそらく、疑問符を含むURLがクロールされるのをブロックします。これは、すべてのURLに疑問符が含まれており、少なくとも私の場合は、正当なURLが含まれていないためです。

最近、非常によく似た問題が発生し、「&wpmp_switcher = desktop」または「&wpmp_switcher = mobile」だけでなく、これらの意味のないネストされたURLクロールに「mobile?pw_post_layout」もありました(詳細は http:// deputycio.com/8013/googlebot-gone-crazy-maybe-not-its-fault 関連しているので、このリンクでポリシーを破っていないことを願っています)。この修正は症候性だったので、私はまだ本当の原因について困惑しています。それ以来、誰かがこの問題について他に何かを見つけましたか?

0
Zarko

マップでこれを使用してみてください:

~(crawl|Googlebot|Slurp|spider|bingbot|tracker|click|parser|spider)$ 1;

私が覚えていることから、場所を使用していない限り、正規表現を終了するには$を使用する必要があります-試してみる価値があります。

0
Sašo