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に必要な共通知識のまとめ

推薦する

ウェブサイトに最も必要なのは、ターゲットユーザーグループのエクスペリエンスを向上させることです。

「大河は東に流れ、波は歴代の英雄たちを洗い流した。古城の西側は三国時代の周朗の赤壁だと言われている...

Vueはシンプルなショッピングカートの例を実装します

この記事では、参考までに、Vue の具体的なコードを共有して、簡単なショッピングカートを実装します。...

Vue は PC カメラを呼び出してリアルタイムで写真を撮る機能を実装します

VueはPCカメラを呼び出してリアルタイムで写真を撮影します。参考までに、具体的な内容は次のとおりで...

Centos7のFirewalldファイアウォールの基本コマンドの詳細な説明

1. Linuxファイアウォールの基礎Linux ファイアウォール システムは主にネットワーク層で動...

HTML ハイパーリンク内の中国語文字化けの分析と解決

Vm 内のハイパーリンク URL は、Get 要求のパラメータとして中国語と連結する必要があります。...

Vue3 Reactivityの実装方法を教えます

目次序文始めるちょっとした考えコードの実装真似する実装トラックトリガーの実装観察の実装計算の実装序文...

Vueは遅延読み込みによりページの応答速度を向上

目次概要遅延読み込みとは何ですか?最適化を開始するビジネスモジュールを分割する遅延読み込みルート構成...

MySQL シリーズ II マルチインスタンス構成

チュートリアルシリーズMySQL シリーズ: MySQL リレーショナル データベースの基本概念My...

HTML でのフォームとフォーム送信操作に関する情報のコレクション

ここでは、フォーム要素とフォーム送信に関する知識を紹介します。フォーム要素フォーム要素の DOM イ...

JS でページのスクリーンショット機能を実装する方法

「ページのスクリーンショット」は、ページポスターの生成、ポップアップ画像の共有など、フロントエンドで...

ウェブページの画像最適化ツールと使用方法のヒントの共有

ウェブページの基本要素として、画像はページの読み込み速度に影響を与える重要な要素の 1 つです。画像...

jQuery を使用して、iframe 下の無効なページ アンカー ポイントの問題を修正する

適用シナリオ: iframe ページにスクロール バーがなく、親ウィンドウにスクロール バーが表示さ...

選択にスタイルを追加するための純粋な CSS (スクリプトなし) 実装

通常は ul、li を介して選択のデフォルト スタイルを変更して、実現をシミュレートします。このよう...

Dockerコマンドは一般ユーザーが実行できるように実装されている

dockerをインストールすると、通常はdockerユーザーグループが作成されます。ステップ2: 現...

HTML で相対パスを使用してディレクトリのすべてのレベルのファイルを取得する方法の詳細な説明

相対パスの概念現在のファイルの場所を参照ポイントとして使用して、ターゲット ファイルへのパスを確立し...