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

推薦する

Centos7はMySQLログに基づいてデータを復元するためのサンプルコードを実装します

導入Binlog ログ、つまりバイナリ ログ ファイルは、データベースに対するユーザー操作の SQL...

MySQL シリーズ 3 基礎

目次チュートリアルシリーズ1. MySQL の紹介2. MySQLの開発履歴3. MariaDBの基...

MySQL におけるデフォルトの使用法の詳細な説明

NULL および NOT NULL 修飾子、DEFAULT 修飾子、AUTO_INCREMENT 修...

ChromeとIEに対応したWMPに埋め込まれたHTMLの詳細な紹介

実際には、対応する記述方法は多数ありますが、最も一般的なのは object + embedded で...

SQL でテーブルにフィールドとコメントを追加する方法

1. フィールドを追加します。 alter table テーブル名 ADD フィールド名 タイプ;例...

MySQL ストアド プロシージャの使用例の分析

この記事では、MySQL ストアド プロシージャの使用方法について説明します。ご参考までに、詳細は以...

2 つの Linux サーバー間の自動ファイル同期

サーバーB(172.17.166.11)の電源がオンまたは再起動されると、サーバーA(172.17....

HTML における iFrame タグの 2 つの使用法

最近、私は「ぶどうコレクション」というプロジェクトに取り組んでいます。簡単に言うと、Budou ペー...

MySQL のバックアップとリカバリの設計アイデア

背景まず、背景を説明します。ある制約により、当社の現在のバックアップ戦略では、1 日おきにフル バッ...

CentOS 7.x dockerはoverlay2ストレージ方式を使用する

/etc/docker/daemon.json を編集し、以下を追加します。 { "ストレ...

スクロールバーを非表示にしながらもスクロール効果を維持する純粋な CSS (モバイルと PC)

携帯モバイル ページは Chrome および Safari とのみ互換性があればよいため、カスタム ...

MySQL シリーズ: MySQL リレーショナル データベースの基本概念

目次1. 基本概念2. データベース管理技術の開発3. リレーショナルデータベース(RDBMS)の概...

Docker ベースの ELK ログ システムを構築する方法

背景要件:ビジネスがどんどん大きくなると、サーバーの数も増え、さまざまなアクセスログ、アプリケーショ...

MySQL マスタースレーブレプリケーションでエラーをスキップする方法

1. 従来のbinlogマスタースレーブレプリケーション、エラー報告をスキップする方法 mysql&...

SQL Server データベース エラー 5123 の解決方法

なぜなら、SQL Server 2005 に基づくデータベース チュートリアルがあり、そこで使用され...