Nginx のアンチホットリンクを設定する方法

Nginx のアンチホットリンクを設定する方法

実験環境

• 最小限のインストール済みの CentOS 7.3 仮想マシン
• 構成: 1 コア/512MB
•nginx バージョン 1.12.2

1. ホットリンクウェブサイトを設定する

1. nginx仮想マシンを起動し、2つのWebサイトを構成する

vim /etc/nginx/conf.d/vhosts.conf

次のコンテンツを追加します

サーバー{
 聞く 80;
 サーバー名 site1.test.com;
 ルート /var/wwwroot/site1;
 インデックス index.html;

 位置 / {
 }
}

サーバー{
 聞く 80;
 サーバー名 site2.test.com;
 ルート /var/wwwroot/site2;
 インデックス index.html;

 位置 / {
 }
} 

2. ホストマシンのC:\Windows\System32\drivers\etc\hostsファイルを編集します。

192.168.204.11 サイト1.test.com
192.168.204.11 サイト2.test.com

3. ウェブサイトのルートディレクトリを作成する

mkdir /var/wwwroot
/var/wwwroot に移動します
mkdir サイト1
mkdir サイト2
echo -e "<h1>site1</h1><img src='1.jpg'>" >> site1/index.html
echo -e "<h1>site2</h1><img src='http://site1.test.com/1.jpg'>" >> site2/index.html

4. 1.jpgを/var/wwwroot/site1ディレクトリにアップロードします。

5. nginxサービスを開始する

systemctl nginx を再起動します
netstat -anpt | grep nginx 

6. ファイアウォールのポート80を開く

強制0を設定する
ファイアウォールコマンド --zone=public --add-port=80/tcp --permanent
ファイアウォール-cmd --reload

7. ホストマシンへのアクセス

このサイトについて

http://site2.test.com

2. site1.test.comのアンチホットリンクを設定する

1. nginx設定ファイルを編集する

サーバー{
 聞く 80;
 サーバー名 site1.test.com;
 ルート /var/wwwroot/site1;
 インデックス index.html;

 位置 / {
 }

 場所 ~ \.(jpg|png|gif|jpeg)$ {
  有効なリファラー site1.test.com;
  ($invalid_referer) の場合 {
   403 を返します。
  }
 }
}
サーバー{
 聞く 80;
 サーバー名 site2.test.com;
 ルート /var/wwwroot/site2;
 インデックス index.html;

 位置 / {
 }
} 

2. nginxサービスを再起動する

systemctl restart nginx

3. ホストマシンへのアクセス

ブラウザのキャッシュをクリアして、http://site1.test.com にアクセスします。

ブラウザのキャッシュをクリアして、http://site2.test.com にアクセスしてください。

アンチホットリンク設定が役割を果たしていることがわかります

3. 他のリソースを返すようにアンチホットリンクを設定する

1. nginx設定ファイルを編集する

アンチホットリンクで保護されたリソースを書き換えるための仮想ホストを追加する

サーバー{
 聞く 80;
 サーバー名 site1.test.com;
 ルート /var/wwwroot/site1;
 インデックス index.html;
 位置 / {
 }
 場所 ~ \.(jpg|png|gif|jpeg)$ {
  有効なリファラー site1.test.com;
  ($invalid_referer) の場合 {
   書き換え^/ http://site3.test.com/notfound.jpg;
   #403 を返します。
  }
 }
}
サーバー{
 聞く 80;
 サーバー名 site2.test.com;
 ルート /var/wwwroot/site2;
 インデックス index.html;
 位置 / {
 }
}
サーバー{
 聞く 80;
 サーバー名 site3.test.com;
 ルート /var/wwwroot/site3;
 インデックス index.html;
 位置 / {
 }
}

説明する

location ~ \.(jpg|png|gif|jpeg)$ {} は、アンチホットリンクを設定するファイルの種類で、縦線 | で区切られます。
valid_referers site1.test.com *.nginx.org; はスペースで区切られたホワイトリストです。ワイルドカードドメイン名を設定するには * を使用できます。
if ($invalid_referer) {} は、ホワイトリストに適合しているかどうかを判断するために使用されます。ホワイトリストに適合していない場合は、{} 内のコンテンツが実行されます。
rewrite ^/ http://site3.test.com/notfound.jpg; はリソースを書き換えます。ホワイトリストに一致しない場合は、このアドレスに書き換えられます。
return 403; は返されるステータス コードが 403 であることを意味します。

2. site3ルートディレクトリを作成する

/var/wwwroot に移動します
mkdir サイト3
echo -e "<h1>site3</h1><img src='notfound.jpg'>" >> site3/index.html

3. notfound.jpgファイルを/var/wwwroot/site3ディレクトリにアップロードします。

4. nginxサービスを再起動する

systemctl restart nginx

5. ホストマシン上のC:\Windows\System32\drivers\etc\hostsファイルを編集します。

site3.test.com のマッピングを追加する

192.168.204.11 サイト1.test.com
192.168.204.11 サイト2.test.com
192.168.204.11 サイト3.test.com

6.ホストマシンでhttp://site2.test.comにアクセスします。

ご覧のとおり、site2 で盗まれた site1 の 1.jpg ファイルは、site3 の notfound.jpg ファイルにリダイレクトされます。

要約する

以上が、私が紹介したNginxのアンチホットリンクを設定する操作方法です。お役に立てれば幸いです。ご質問があれば、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • Linux での Nginx アンチホットリンクと最適化の実装コード
  • Nginx でホットリンクを防ぐ 3 つの方法
  • Nginx アンチホットリンク設定方法
  • Nginx サーバーでのホットリンク防止方法の紹介
  • Nginx イメージホットリンク保護設定例
  • Nginx でアンチホットリンクを設定するための手順を完了する
  • Nginxのアンチホットリンクとサービス最適化設定の全プロセス

<<:  VueのSSRサーバーサイドレンダリング例の詳細な説明

>>:  大量のデータをMySQLにインポートする際に発生する問題と解決策の分析

推薦する

Navicat Premiumを使用してMySQLデータベースにリモート接続する方法

新しい接続を作成する側がクライアントに相当し、接続される側がサーバーに相当します。手順は次のとおりで...

JavaScript のクロージャの問題の詳細な説明

クロージャは、純粋関数型プログラミング言語の伝統的な機能の 1 つです。クロージャをコア言語構造の不...

HTML文書の基本構造(Webページ作成の基礎知識)

HTMLの動作原理: 1. ローカル操作: ブラウザでhtmlファイルを開く2. リモートアクセス...

VMWare仮想マシンのcentosの時間が現地時間と矛盾する問題を解決する

VM Ware 仮想マシン CentOS の時刻は、次の図に示すように、現地時間と一致しません。おそ...

Vue ミックスインの使い方の詳しい説明

目次Vue ミックスインの使用ミックスインでのデータアクセスミックスイン/index.jsホーム.v...

Dockerを使用してブログサイトを素早く構築する方法の詳細な説明

目次1. 準備2. 展開プロセス3. アクセステストHalo は、ブログに慣れている学生に追加のオプ...

Mysqlはブール型の演算を設定します

Mysqlはブール型を設定します1. Tinyintタイプテストテーブルを作成し、blフィールドをブ...

JavaScript を使用して簡単なアルゴリズムを実行する方法

目次質問1件2つの方法3 実験結果と考察質問1件ご存知のとおり、 Pycharm 、 IDLE 、 ...

vue3で注意すべき2つのポイントを詳しく解説:セットアップ

目次vue2の場合vue3ではセットアップに関する注意事項セットアップライフサイクルは、before...

CSS グラデーション効果の概要 (線形グラデーションと放射状グラデーション)

線形グラデーション 背景画像: linear-gradient(方向、開始色、中間色1、中間色2、....

React イベントバインディングの詳細

目次クラスコンポーネントイベントバインディング関数コンポーネントイベントバインディング要約するRea...

JavaScript で最も高速なループはどれですか?

どの for ループまたは反復子がニーズに適しているかを知ることで、アプリケーションのパフォーマンス...

MySQLのワークベンチ例の詳細な説明

MySQL Workbench - モデリングおよび設計ツール1. モデルは、最も効果的で高性能なデ...

MySQLのさまざまなロックの概念的理解

楽観的ロック楽観的ロックは、主にデータ バージョン記録メカニズムに基づいて実装され、通常はデータベー...

MySQL フルテキスト インデックス、ジョイント インデックス、Like クエリ、JSON クエリのうち、どれが高速ですか?

目次クエリの背景1. クエリをいいね2. JSON関数クエリ3. 共同インデックスクエリ4. 全文イ...