NGINX Plus の最も一般的なユースケースの1つであるコンテンツキャッシュは、ローカルのオリジンサーバーの高速化や、コンテンツデリバリーネットワーク(CDN)のエッジサーバーを作成する目的で使用されます。コンテンツのキャッシュの使用の可否やユーザーのトラフィックのプロファイルによって異なるものの、キャッシュによって、オリジンサーバーの負荷を大幅に軽減できます。
NGINX Plusは、上流のHTTPサーバーから取得したコンテンツやFastCGI、SCGI、uwsgiなどのサービスから返されたレスポンスをキャッシュできます。
NGINX Plusでは、オープンソース版NGINXのコンテンツキャッシュ機能に加えて、キャッシュ消去のサポートが追加され、キャッシュステータスがライブアクティビティモニタリングダッシュボードにわかりやすく表示されます。
コンテンツキャッシュを使用する理由
コンテンツキャッシュは、Webページのロード時間を短縮し、上流のサーバーの負荷を軽減し、オリジンサーバーに障害が発生した場合にキャッシュされたコンテンツをバックアップとして使用して可用性を向上させます。
- サイトパフォーマンスの向上 – NGINX Plusは、あらゆるタイプのキャッシュコンテンツを静的コンテンツと同じ速度で提供するため、レイテンシーを短縮してレスポンスに優れたWebサイトを実現します。
- キャパシティの拡張 – NGINX Plus は、オリジンサーバーから反復タスクをオフロードしてキャパシティを開放することで、より多くのユーザーの処理とより多くのアプリケーションの実行を可能にします。
- 可用性の向上 – NGINX Plus は、オリジンサーバーがダウンした場合にキャッシュしたコンテンツを(期限切れであっても)提供することで、ユーザーを致命的なエラーから保護します。
NGINX PlusとNGINXは、オリジンコンテンツのHTTPサーバー、FastCGIやその他のプロトコルのアプリケーションゲートウェイ、上流サーバーのHTTPプロキシをまとめて提供する、Webインフラストラクチャの統合ソリューションです。NGINX Plusには、エンタープライズグレードのアプリケーションロードバランサーが追加され、Webインフラストラクチャのフロントエンドロードバランサーが統合されています。
詳細 – NGINX Plusによるコンテンツキャッシュ
キャッシュされたコンテンツはディスクの永続キャッシュに保存され、オリジンコンテンツとまったく同じ方法でNGINX PlusやNGINXによって提供されます。
コンテンツキャッシュを有効にするには、proxy_cache_path
ディレクティブとproxy_cache
ディレクティブを構成に記述します。
# Define a content cache location on disk
proxy_cache_path /tmp/cache keys_zone=mycache:10m inactive=60m;
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:8080;
# reference the cache in a location that uses proxy_pass
proxy_cache mycache;
}
}
NGINX PlusとNGINXはデフォルトで、コンテンツキャッシュに安全かつ慎重なアプローチを採用します。NGINX PlusとNGINXは、GET
またはHEAD
のリクエストでSet-Cookie
レスポンスなしで取得したコンテンツをキャッシュし、キャッシュ時間はオリジンサーバーのヘッダー(X-Accel-Expires
、Cache-Control
、Expires
)によって定義されます。NGINX Plusは、RFC 5861で定義されたCache-Control
拡張機能、stale-while-revalidate
、stale-if-error
を採用しています。
さまざまなディレクティブを使用することで、これらの動作を拡張したり微調整したりすることができます。詳細については、「NGINX Plus管理者ガイド」を参照してください。
キャッシュの測定と報告
NGINX PlusのライブアクティビティモニタリングAPIは、コンテンツキャッシュの使用率や効果の測定に使用できるさまざまな統計を報告します。

JSONデータには、キャッシュアクティビティに関するすべての情報が含まれます。
期限切れコンテンツの管理
NGINX PlusとNGINXは、デフォルトでキャッシュされたコンテンツが有効である限り提供します。期限は構成可能で、オリジンサーバーが設定するCache-Control
ヘッダーによって制御できます。期限が過ぎると、キャッシュされたコンテンツは期限切れになり、オリジンサーバーに置かれたコンテンツとキャッシュされたコンテンツが同じであるかチェックして再検証する必要があります。
期限切れコンテンツがクライアントからリクエストされない可能性もあるため、NGINX PlusとNGINXは、クライアントからリクエストされた場合のみ期限切れコンテンツを再評価します。これはバックグラウンドで実行され、期限切れコンテンツを直ちに提供することで、クライアントリクエストが中断したり、その他の理由で遅延が発生したりすることはありません。オリジンサーバーが利用できない場合も、期限切れコンテンツはデリバリーされるため、オリジンサーバーの負荷のピークや長期の機能停止であっても高可用性が実現します。
NGINXやNGINX Plusが期限切れコンテンツを提供する条件を構成するには、ディレクティブを指定するか、オリジンサーバーのCache-Control
ヘッダー、stale-while-revalidate
、stale-if-error
の値が使用されるようにします。
キャッシュからのコンテンツの消去
コンテンツキャッシュの副作用として、オリジンサーバーでのコンテンツの更新が直ちにキャッシュに反映されるという保証はないため、一定期間は期限切れのコンテンツがクライアントに提供され続ける可能性があります。更新処理で多数のリソースが同時に変更された場合(CSSファイルと参照している画像の変更など)、クライアントには期限切れと最新のリソースが混在し、表示の一貫性が失われる可能性があります。
NGINX Plusのキャッシュ消去機能を使用することで、この問題を簡単に解決することができます。proxy_cache_purge
ディレクティブを指定することで、NGINX Plusのコンテンツキャッシュから、構成した値に一致する項目を直ちに削除できます。カスタムHTTPヘッダーまたはメソッドを含むリクエストを使用するのが最も簡単な方法です。
例えば以下の構成は、PURGE
HTTPメソッドを使用するリクエストを識別し、一致するURLを削除します。
proxy_cache_path /tmp/cache keys_zone=mycache:10m levels=1:2 inactive=60s;
map $request_method $purge_method {
PURGE 1;
default 0;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://localhost:8002;
proxy_cache mycache;
proxy_cache_purge $purge_method;
}
}
次の例のcurl
コマンドのように、さまざまなツールから削除リクエストを発行することができます。
$ curl -X PURGE -D – "http://www.example.com/*"
HTTP/1.1 204 No Content
Server: nginx/1.5.12
Date: Sat, 03 May 2014 16:33:04 GMT
Connection: keep-alive
この例に示したように、URLにアスタリスク(*
)ワイルドカードを付加することで、URLの先頭部分が共通するリソースをまとめて削除できます。
詳細情報
NGINX Plusには、NGINXのすべてのキャッシュ機能が継承されています。詳細については、「NGINX Plus管理者ガイド」やドキュメントを参照してください。