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

推薦する

CSS3 で半透明の背景画像と不透明なコンテンツを実現する方法の例

以前のブログのログインページを作成していたときに、この問題に遭遇しました。突然、透明な背景画像と不透...

MySQL メタデータで Hive テーブル作成ステートメントのコメント スクリプトを生成する方法

序文この記事は主にMySQLメタデータ生成Hiveテーブル作成ステートメントコメントスクリプトに関す...

CSS により、子コンテナが親要素を超えます (子コンテナは親コンテナ内で浮動します)

序文場合によっては、次の図のような浮動効果の要件が必要になります。 成し遂げる標準的な通常の状況では...

JavaScript データ プロキシとイベントの詳細な分析

目次データブローカーとイベントObject.defineProperty メソッドのレビューデータブ...

Linux 上の MySQL 5.7 でパスワードを忘れる問題を解決する

1. 問題Linux 上の mysql5.7 のパスワードを忘れました2. 解決策• ステップ 1:...

VMware Esxi のルート パスワードを忘れた後に正常に取得する方法

CentOS6 インストール ディスク (任意のバージョン) を準備するか、別の pnux インスト...

Docker-compose ワンクリックデプロイ gitlab 中国語版の方法手順

1. GitLabの紹介Gitlab 公式アドレス: https://about.gitlab.co...

ウェブページ HTML 特殊記号 HTML 特殊文字比較表

特殊記号名前付きエンティティ10進数エンコード特殊記号名前付きエンティティ10進数エンコードアルファ...

TypeScript のクラス

目次1. 概要2. シンプルなクラスを定義する3. 継承4. public、private、prot...

Mysql Explainコマンドの使用と分析

mysql explain コマンドは、MySQL がインデックスを使用して選択ステートメントを処理...

Linux sshのデフォルトのリモートポート番号を変更する6つの手順

Linux のデフォルトの ssh リモート ポートは 22 です。デフォルトのポートは、悪意のある...

Nginx 502 Bad Gateway エラーの原因と解決策

Nginx 502 Bad Gateway エラーに何度か遭遇しました。ここでメモしておこうと思いま...

Linux サーバー上のローカル静的リソースにアクセスするために nginx を使用する方法

1. ポート 80 が占有されているかどうかを確認します。通常、ポート 80 は Apache サー...

Vue3 の ref と toRef の違いを簡単に分析します

1. refがコピーされ、ビューが更新されますrefを使用してオブジェクトのプロパティ値をレスポンシ...

JavaScriptはブラウザがIEかどうかを判定します

フロントエンド開発者としては、IEの落とし穴は避けて通れません。他のブラウザはいいのにIEは壊れてい...