Nginx サーバーで Web クローラーをブロックおよび禁止する方法

Nginx サーバーで Web クローラーをブロックおよび禁止する方法

通常、すべての Web サイトは、多くの非検索エンジン クローラーに遭遇します。これらのクローラーのほとんどは、コンテンツ収集に使用されるか、初心者によって作成されます。検索エンジン クローラーとは異なり、非検索エンジン クローラーには頻度制御がなく、多くのサーバー リソースを消費することが多く、帯域幅の無駄になります。

実際、Nginx は User-Agent に基づいてリクエストを簡単にフィルタリングできます。要件を満たさないクローラー リクエストをフィルタリングするには、必要な URL エントリ位置で単純な正規表現を使用するだけです。

位置 / {
  $http_user_agent の場合、"python|curl|java|wget|httpclient|okhttp") {
    503 を返します。
  }
  # その他の通常の構成...
}

注: 変数$http_user_agentその場所で直接参照できる Nginx 変数です。 ~* は大文字と小文字を区別しない正規一致を示し、Python を通じて Python クローラーの 80% を除外できます。

Nginx で Web クローラーをブロックする

サーバー{ 
    聞く 80; 
    サーバー名 www.xxx.com; 
    #文字セット koi8-r; 
    #access_log ログ/host.access.log メイン; 
    #位置 / { 
    #ルートhtml; 
    # インデックス index.html index.htm; 
    #} 
  if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") { 
        403 を返します。 
    } 
  場所 ~ ^/(.*)$ { 
        proxy_pass http://localhost:8080; 
    proxy_redirect オフ; 
    proxy_set_header ホスト $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    クライアントの最大ボディサイズは10mです。 
    クライアントボディバッファサイズ 128k; 
    プロキシ接続タイムアウト 90; 
    プロキシ送信タイムアウト 90; 
    プロキシ読み取りタイムアウト 90; 
    プロキシバッファサイズ 4k; 
    プロキシバッファ 4 32k; 
    proxy_busy_buffers_size 64k; 
    proxy_temp_file_write_size 64k; 
  } 
    #エラーページ 404 /404.html; 
    # サーバーのエラーページを静的ページ /50x.html にリダイレクトします 
    # 
    エラーページ 500 502 503 504 /50x.html; 
    場所 = /50x.html { 
      ルートhtml; 
    } 
    # PHP スクリプトを 127.0.0.1:80 で listen している Apache にプロキシします 
    # 
    #場所 ~ \.php$ { 
    # プロキシパス http://127.0.0.1; 
    #} 
    # PHP スクリプトを 127.0.0.1:9000 で待機している FastCGI サーバーに渡します 
    # 
    #場所 ~ \.php$ { 
    #ルートhtml; 
    #fastcgi_pass 127.0.0.1:9000; 
    # fastcgi_index インデックス.php; 
    # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 
    #fastcgi_params を含めます。 
    #} 
    # Apacheのドキュメントルートが.htaccessファイルへのアクセスを拒否する 
    # nginxのものと一致します 
    # 
    #場所 ~ /\.ht { 
    # すべて拒否; 
    #} 
  }

curlでテストできます

curl -I -A "qihoobot" www.xxx.com

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • 悪意のあるクローラーの頻度を制限するために nginx 設定を変更する
  • Nginx でクローラーをフィルタリングするための User-Agent を設定する簡単な方法
  • Linux/Nginx で検索エンジン スパイダー クローラーの動作を表示する方法
  • 検索エンジンのクローラーの頻度を制限し、Web クローラーのブロックを禁止する Nginx 構成の例
  • UA による Web サイトのクロールを防ぐ Nginx のクローラー対策戦略

<<:  MySQL マスターライブラリ binlog (master-log) とスレーブライブラリ relay-log 間のコードの詳細な説明

>>:  vue3 統合 API における vue2 の $refs の代替方法についての簡単な説明

推薦する

Docker で Maven プロジェクトをより速くビルドする

目次I. 概要2. 従来の多段階イメージ構築3. Buildkitを使用してイメージをビルドする4....

CSS 読み込み効果の実装 パックマン

えーっと、名前はただの推測です 2333序文これは練習用の CSS デモです。何か間違っている点があ...

色の16進数カラーコード表表示と16進値の比較表示で簡単に検索できます

さまざまな色の16進コード表[パート1] 赤とピンク、およびそれらの 16 進コード。 #99003...

GDBデバッグMySQL実戦ソースコードコンパイルとインストール

ソースコードをダウンロード git クローン https://github.com/mysql/my...

Windows での MySQL インストール チュートリアル (画像とテキスト付き)

MySQL インストール手順 MySQL は、スウェーデンの MySQL AB によって開発された...

MySQL データベースで機密データの暗号化と復号化を実装する方法

目次1. 準備2. MySQL暗号化関数方式2.1 MySQL 暗号化2.2 MYSQL 復号化3....

Dockerとiptablesとブリッジモードのネットワーク分離と通信操作の実装

Docker は、ブリッジ、ホスト、オーバーレイなどの複数のネットワークを提供します。同じ Dock...

条件付きコメント形式の書き方とサンプルコード

フロントエンドエンジニアとして、IE は私たちにとって馴染み深いものであるはずです。設計案を実装する...

MySQL で珍しい文字を挿入できないときの対処方法 (文字列値が正しくない)

最近、ビジネス側から、一部のユーザー情報の挿入に失敗し、エラー メッセージが「不正な文字列値:&qu...

データベースのデフォルトパスを変更した後にmysqlが起動できない問題の解決策

序文mysql がデフォルトのデータベース パスを変更したため、サービスを開始できませんでした。ログ...

画像を読み込むための JavaScript キャンバス

この記事では、画像を読み込むためのJavaScriptキャンバスの具体的なコードを参考までに紹介しま...

ウェブページ経由で jar パッケージを Nexus にアップロードする方法

Maven を使用してプロジェクトを管理する場合、jar パッケージをプライベート ウェアハウスにア...

MySQLデータベース移行におけるデータ文字化けの問題を解決する

リーダーの指示のもと、Java プロジェクトを引き継ぎ、リファクタリングを行う必要がありました。同時...

MySQLデータ損失の原因と解決策

目次序文問題の説明原因分析拡大する総括する序文最近、データの欠落やデータの損失に関するフィードバック...

DockerとVMwareの競合を解決する

1. Dockerの起動の問題:問題は解決しました: Hyper-V をオンにする必要があります (...