Nginx で CDN サーバーを構築する方法の詳細な説明 (画像とテキスト)

Nginx で CDN サーバーを構築する方法の詳細な説明 (画像とテキスト)

Nginxのproxy_cacheを使用してキャッシュサーバーを構築する1: ngx_cache_purgeをコンパイルする

1. Nginx の Proxy_cache は、キー値の md5 ハッシュに基づいてキャッシュを保存し、任意のキーをサポートします。たとえば、「ドメイン名、URI、パラメータ」をキーに組み合わせることができます。また、404/302 などの 200 以外のステータス コードもサポートします。

2. Nginx の Proxy_cache を使用するには、ngx_cache_purge モジュールを Nginx にコンパイルする必要があります。nginx -V を実行して、ngx_cache_purge という単語があるかどうかを確認します。ない場合は、手動でコンパイルする必要があります。
Nginx CDN の手動コンパイル


3. ここでは、デモとして Oneinstack を使用して ngx_cache_purge モジュールをコンパイルします。他の LNMP パッケージを使用している場合は、それらを参照してください。基本的なプロセスは同様です。コマンドは次のとおりです。

cd /root/oneinstack/src #インストールパッケージディレクトリに入る nginx -V
tar xzf nginx-1.10.3.tar.gz #上記で確認した nginx のバージョンに応じて解凍パッケージを選択します wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar zxvf ngx_cache_purge-2.3.tar.gz
/root/oneinstack/src/nginx-1.10.3 をコピーします。

# 以下の ./configure の後に追加されるパラメータについては、nginx -V で取得したパラメータを直接コピーし、最後に –add-module=../ngx_cache_purge-2.3 を追加して参照することができます。
./configure –prefix=/usr/local/nginx –user=www –group=www –with-http_stub_status_module –with-http_v2_module –with-http_ssl_module –with-http_gzip_static_module –with-http_realip_module –with-http_flv_module –with-http_mp4_module –with-openssl=../openssl-1.0.2k –with-pcre=../pcre-8.39 –with-pcre-jit –with-ld-opt=-ljemalloc –add-module=../ngx_cache_purge-2.3

作る

mv /usr/local/nginx/sbin/nginx{,$(日付 +%m%d)}
cp objs/nginx /usr/local/nginx/sbin #oneinstack、他の操作ではこの操作は必要ありません nginx -t
サービス nginx を再起動

4. インストールが完了したら、nginx -V を再度実行すると、Nginx が ngx_cache_purge に正常にコンパイルされたことがわかります。

2. Nginxのproxy_cacheを使用してキャッシュサーバーを構築する2: Nginx設定ファイルを変更する

1. まず、Nginx 設定ファイル nginx.conf (パスは通常 /usr/local/nginx/conf/nginx.conf) を見つけ、設定ファイル Http に次のコードを追加します (パスは独自のパスに変更する必要があることに注意してください)。

プロキシ接続タイムアウト 5;
プロキシ読み取りタイムアウト 60;
プロキシ送信タイムアウト 5;
プロキシバッファサイズ 16k;
プロキシバッファ 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_cache_path /data/wwwroot/pic.freehao123.com レベル=1:2 キーゾーン=キャッシュワン:200m 非アクティブ=30d 最大サイズ=5g;
proxy_temp_path /data/wwwroot/pic.freehao123.com/temp;

2. 操作は以下のとおりです。

3. 次に、仮想ホストの nginx.conf (パスは通常 /usr/local/nginx/conf/vhost/pic.freehao123.com.conf) で、server listen 80 と listen 443 ssl http2 に次のコマンドを追加します。

位置 /{
proxy_pass https://www.freehao123.com;
proxy_redirect オフ;
proxy_set_header ホスト www.freehao123.com;
proxy_cache キャッシュ_one;
プロキシキャッシュの有効期間 200 302 304 365d;
プロキシキャッシュ有効 301 1d;
proxy_cache_valid 任意の 1m;
add_header Images-Cache "$host からの $upstream_cache_status";
add_header プラグマ public;
add_header Cache-Control "public、must-revalidate、proxy-revalidate";
access_log オフ; log_not_found オフ; 有効期限最大;
}

4. 設定ファイルを保存して再度アップロードし、次のコマンドを実行します。

nginx -t
サービス nginx を再起動

5. まず、Nginx の設定が正しいかどうかを確認します。問題がなければ、Nginx を再起動します。

6. Gravatar アバターをキャッシュする場合、コードは次のようになります。

場所 /アバター{
proxy_pass http://cn.gravatar.com;
proxy_redirect オフ;
proxy_set_header ホスト cn.gravatar.com;
proxy_cache キャッシュ_one;
プロキシキャッシュの有効期間 200 302 304 365d;
プロキシキャッシュ有効 301 1d;
proxy_cache_valid 任意の 1m;
add_header Images-Cache "$host からの $upstream_cache_status";
add_header プラグマ public;
add_header Cache-Control "public、must-revalidate、proxy-revalidate";
access_log オフ; log_not_found オフ; 有効期限最大;
}

7. 次に、第 2 レベルのドメイン名 (pic.freehao123.com) を開くと、画像が正しくキャッシュされていることがわかります。

8. 以下は、上記と同じ効果を持つ別の Nginx キャッシュ コードです。

#まず、Nginx 設定に次のコマンドを記述します。
proxy_temp_file_write_size 128k;
proxy_temp_path /data/wwwroot/pic.ucblog.net/temp;
proxy_cache_path /data/wwwroot/pic.ucblog.net レベル=1:2 キーゾーン=キャッシュワン:500m 非アクティブ=7d 最大サイズ=5g;

#次に、仮想ホストの Nginx 構成に次のコマンドを記述します。
まず、サーバーが 80 コードをリッスンし、443 コードをリッスンする前に、以下を追加します。
アップストリームグラバター{
サーバー secure.gravatar.com:443;
}
#サーバーの listen 80 と listen 443 に以下を追加します。
位置 / {
proxy_pass_header サーバー;
proxy_set_header ホスト cn.gravatar.com;
proxy_set_header Accept-Encoding ";
proxy_redirect オフ;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Xスキーム $scheme;
proxy_pass https://gravatar;
proxy_cache キャッシュ_one;
プロキシキャッシュの有効日数は200日304日365日です。
proxy_cache_key $host$uri$is_args$args;
有効期限が最大になります。
}

9. VPS ホストでは、proxy_cache によって生成されたハッシュ ファイルを確認できます。これは、キャッシュが成功したことを意味します。

3. Nginxのproxy_storeを使用してミラーサーバーを構築する:Nginxの設定方法を変更する

1. Nginx の proxy_store の機能は、ローカル ハードディスク上に静的ファイルを直接作成して読み取ることです。これは、Qiniu や Youpai のミラー CDN 機能に似ています。ソース サイトの静的画像やその他のファイルは、最初のアクセス時に自動的に取得されます。その後のアクセスでは、CDN サーバーから直接読み取られるため、プロセスが高速化されます。

2. Nginx 仮想ホスト構成ファイルを直接変更し (ここではデモとして img.freehao123.com.conf を使用します)、次のコードを追加します。

位置 / {
有効期限は3日です。
proxy_set_header Accept-Encoding ";
ルート /data/wwwroot/img.freehao123.com;
proxy_store オン;
proxy_store_access ユーザー:rw グループ:rw すべて:rw;
proxy_temp_path /data/wwwroot/img.freehao123.com/temp;
if ( !-e $リクエストファイル名 ) {
proxy_pass https://www.freehao123.com;
}
}

3. 設定のアップロードを再度保存し、Nginx を再起動します。 img.freehao123.com から要求された画像などの静的ファイルがソースサイトから正常に取得されたことがわかります。

4. VPS ホストのストレージ ディレクトリでは、proxy_store が画像などの静的ファイルのディレクトリを完全に保存していることも確認できます。これは、Web サイトのミラー ストレージ CDN に相当します。

5. 別の使用方法ですが、効果は上記と同じです。パスを置き換えることを忘れないでください。コードは次のとおりです。

アップストリーム http_tornado {
サーバー www.freehao123.com:443;
}

サーバー{
#その他の設定場所は省略 ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)$ {
ルート /opt/data/product/blog/cache;
proxy_store オン;
proxy_store_access ユーザー:rw グループ:rw すべて:rw;
proxy_temp_path /opt/data/product/blog/cache;
if ( !-e $リクエストファイル名 ) {
proxy_pass http://http_tornado;
}
}
}

4. Nginx の proxy_store と proxy_cache の違いは何ですか?

1. ミラーリングとキャッシュの違い。上記の紹介から、proxy_store は Web サイトのミラーリングに相当することもわかります。画像などの静的ファイルへの 2 回目のアクセスは CDN サーバーから直接読み取られるため、ソース サイトの負担が大幅に軽減されます。 Proxy_cache はキャッシュと同等で、リクエストのキーを生成するため、2 回目のアクセスが高速になります。


2. proxy_store は静的に適しており、proxy_cache は動的に適しています。 Proxy_store は画像全体を CDN サーバーに保存するため、画像 CDN アクセラレーションに適しています。一方、proxy_cache はキャッシュのキーを生成するため、動的な Web サイトのアクセラレーションに適しており、負荷分散に使用してサーバーの負担を軽減できます。

5. ミラー CDN サーバーをセットアップした後は何をすればよいですか?

1. まず、ミラー CDN サーバーを構築すると、ソース サイトのファイルと URL が完全にコピーされるため、検索エンジンに盗作された複製サイトと誤認されることを避けるために、CDN サイトに Robots.txt を追加して、検索エンジンに含まれないようにすることができます。コマンドは次のとおりです (画像を含めることはできますが、他の画像はクロールできません)。

ユーザーエージェント: Baiduspider
許可: /wp-content/uploads/*.jpg$
許可: /wp-content/uploads/*.png$
許可: /wp-content/uploads/*.gif$
許可しない: /

ユーザーエージェント: 360Spider
許可: /wp-content/uploads/*.jpg$
許可: /wp-content/uploads/*.png$
許可: /wp-content/uploads/*.gif$
許可しない: /

ユーザーエージェント: Baiduspider-image
許可: /wp-content/uploads/*.jpg$
許可: /wp-content/uploads/*.png$
許可: /wp-content/uploads/*.gif$
許可しない: /

ユーザーエージェント: 360Spider-Image
許可: /wp-content/uploads/*.jpg$
許可: /wp-content/uploads/*.png$
許可: /wp-content/uploads/*.gif$
許可しない: /

ユーザーエージェント: Sosospider
許可: /wp-content/uploads/*.jpg$
許可: /wp-content/uploads/*.png$
許可: /wp-content/uploads/*.gif$
許可しない: /

ユーザーエージェント: sogou spider
許可: /wp-content/uploads/*.jpg$
許可: /wp-content/uploads/*.png$
許可: /wp-content/uploads/*.gif$
許可しない: /

ユーザーエージェント: YodaoBot
許可: /wp-content/uploads/*.jpg$
許可: /wp-content/uploads/*.png$
許可: /wp-content/uploads/*.gif$
許可しない: /

ユーザーエージェント: Googlebot
許可: /wp-content/uploads/*.jpg$
許可: /wp-content/uploads/*.png$
許可: /wp-content/uploads/*.gif$
許可しない: /

ユーザーエージェント: Bingbot
許可: /wp-content/uploads/*.jpg$
許可: /wp-content/uploads/*.png$
許可: /wp-content/uploads/*.gif$
許可しない: /

ユーザーエージェント: Slurp
許可: /wp-content/uploads/*.jpg$
許可: /wp-content/uploads/*.png$
許可: /wp-content/uploads/*.gif$
許可しない: /

ユーザーエージェント: MSNBot
許可: /wp-content/uploads/*.jpg$
許可: /wp-content/uploads/*.png$
許可: /wp-content/uploads/*.gif$
許可しない: /

ユーザーエージェント: googlebot-image
許可: /wp-content/uploads/*.jpg$
許可: /wp-content/uploads/*.png$
許可: /wp-content/uploads/*.gif$
許可しない: /

ユーザーエージェント: googlebot-mobile
許可: /wp-content/uploads/*.jpg$
許可: /wp-content/uploads/*.png$
許可: /wp-content/uploads/*.gif$
許可しない: /

ユーザーエージェント: yahoo-blogs/v3.9
許可: /wp-content/uploads/*.jpg$
許可: /wp-content/uploads/*.png$
許可: /wp-content/uploads/*.gif$
許可しない: /

ユーザーエージェント: psbot
許可: /wp-content/uploads/*.jpg$
許可: /wp-content/uploads/*.png$
許可: /wp-content/uploads/*.gif$
許可しない: /

ユーザーエージェント: *
許可しない: /

2. 次に、Nginx のホットリンク防止対策をしっかり行います。 CDN サーバーのトラフィックが十分でない場合は、ホットリンク対策を講じることをお勧めします。これにより、サーバーの負担を軽減することもできます。仮想ホスト構成ファイルに次のコードを追加します。

場所 ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
valid_referers なし ブロック済み freehao123.com *.freehao123.com *.google.cn *.google.com *.google.com.hk image.baidu.com *.baidu.com;
($invalid_referer) の場合 {
書き換え^/ https://www.freehao123.com;
#403 を返します。
}
}

3. 3 番目に、Nginx のデフォルト イメージを設定します。これは主に Gravatar アバターをキャッシュするためのものです。ソース サーバーに特定の画像またはファイルが存在しない場合は、キャッシュが完璧に見えるように Nginx のデフォルトの画像またはリンクを設定できます。

場所 /アバター {

try_files $uri /avatar/set-avatar.png;

}

#または以下を使用します:
位置 /{

try_files $uri /set-avatar.png;

}

4. 効果は以下の図に示されています。

Nginx を使って CDN サーバーを構築する方法についての記事(画像とテキスト付き)はこれで終わりです。Nginx を使って CDN サーバーを構築する方法についての詳細は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • nginx 設定ファイルで環境変数を使用する方法
  • nginx を使用して分散電流制限を実装する方法
  • Nginx を使用して静的ページを展開する方法
  • Nginx プロキシを使用してインターネットを閲覧する方法
  • Nginx の動作モードとプロキシ設定の使用の詳細

<<:  JS で CSS 変数を使用する方法

>>:  MySQLに必要な共通知識のまとめ

推薦する

MYSQL(電話番号、IDカード)データ非感応化の実装

1. データ感度低下の説明日常の開発ニーズでは、データの感度低下が頻繁に発生します。たとえば、ID ...

JS の Promise に中止関数を追加する方法

目次概要プロミスレースメソッド約束の再パッケージ化中止コントローラAxiosプラグインにはキャンセル...

LinuxのCentos7でmysql5.7.29を構築する詳細なプロセス

1. MySQLをダウンロードする1.1 ダウンロードアドレスhttps://downloads.m...

JavaScript イベント キャプチャ バブリングとキャプチャの詳細

目次1. イベントの流れ1. コンセプト2. DOMイベントフロー2. イベントの委任1. イベント...

複雑なSQLクエリを含むMySQLの一般的なSQL文の概要

1. 複雑なSQLクエリ1.1. 単一テーブルクエリ(1)指定の列を選択する[例] 全生徒の生徒ID...

コーディングスキルを向上させるためのJavaScriptのヒント

目次1. 一意の値をフィルタリングする2. 短絡評価2.1 シナリオ例3. ブール変換4. 文字列を...

jQueryはhide()とtoggle()関数を使用してカメラブランド表示の非表示機能を実現します。

最近、jQuery を学習しているときに、show()、hide()、toggle() 関数に出会い...

JavaScript をスリープまたは待機させる方法

目次概要setTimeout() の確認スリープ関数の書き方シンプルな選択ループで実行されますか?要...

JavaScript で 9 グリッドのモバイル パズル ゲームを実装

この記事では、Jiugonggeモバイルパズルゲームを実装するためのJavaScriptの具体的なコ...

画像ブラインド表示の効果を実現するための純粋な CSS の例

まず、完成した効果をお見せしましょう 主なアイデア: 実際、このブラインドは一種の手品を使用していま...

MySQLの使用中に発生した問題

ここでは、MySQL の使用中に発生するいくつかの問題とその解決策を示します。 sql_mode=o...

Docker mongoDB 4.2.1 をインストールし、Springboot ログを収集する詳細な手順

1: dockerにmongodbをインストールするステップ1: dockerにmongodbをイン...

DockerとFastDFSのインストールコマンドと使い方の詳しい説明

Dockerの機能1) すぐに始められるユーザーがプログラムを「Docker 化」するには、わずか数...

Vue のデータ応答性に関する詳細な理解

目次1. ES 構文のゲッターとセッター2. ES構文でのdefineProperty 3. Vue...

JSのバイナリファミリーについての簡単な説明

目次概要ブロブBlob の動作BLOB ダウンロード ファイルブロブ画像のローカル表示BLOB ファ...