NGINX.COM
Web Server Load Balancing with NGINX Plus

NGINX Plus の最も一般的なユースケースの1つであるコンテンツキャッシュは、ローカルのオリジンサーバーの高速化や、コンテンツデリバリーネットワーク(CDN)のエッジサーバーを作成する目的で使用されます。コンテンツのキャッシュの使用の可否やユーザーのトラフィックのプロファイルによって異なるものの、キャッシュによって、オリジンサーバーの負荷を大幅に軽減できます。

NGINX Plusは、上流のHTTPサーバーから取得したコンテンツやFastCGISCGIuwsgiなどのサービスから返されたレスポンスをキャッシュできます。

NGINX Plusでは、オープンソース版NGINXのコンテンツキャッシュ機能に加えて、キャッシュ消去のサポートが追加され、キャッシュステータスがライブアクティビティモニタリングダッシュボードにわかりやすく表示されます。

cache-state-R7

コンテンツキャッシュを使用する理由

コンテンツキャッシュは、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-ExpiresCache-ControlExpires)によって定義されます。NGINX Plusは、RFC 5861で定義されたCache-Control拡張機能、stale-while-revalidatestale-if-errorを採用しています。

さまざまなディレクティブを使用することで、これらの動作を拡張したり微調整したりすることができます。詳細については、「NGINX Plus管理者ガイド」を参照してください。

キャッシュの測定と報告

NGINX PlusのライブアクティビティモニタリングAPIは、コンテンツキャッシュの使用率や効果の測定に使用できるさまざまな統計を報告します。

ライブアクティビティモニタリングAPIのサンプルJSONデータ

JSONデータには、キャッシュアクティビティに関するすべての情報が含まれます。

期限切れコンテンツの管理

NGINX PlusとNGINXは、デフォルトでキャッシュされたコンテンツが有効である限り提供します。期限は構成可能で、オリジンサーバーが設定するCache-Controlヘッダーによって制御できます。期限が過ぎると、キャッシュされたコンテンツは期限切れになり、オリジンサーバーに置かれたコンテンツとキャッシュされたコンテンツが同じであるかチェックして再検証する必要があります。

期限切れコンテンツがクライアントからリクエストされない可能性もあるため、NGINX PlusとNGINXは、クライアントからリクエストされた場合のみ期限切れコンテンツを再評価します。これはバックグラウンドで実行され、期限切れコンテンツを直ちに提供することで、クライアントリクエストが中断したり、その他の理由で遅延が発生したりすることはありません。オリジンサーバーが利用できない場合も、期限切れコンテンツはデリバリーされるため、オリジンサーバーの負荷のピークや長期の機能停止であっても高可用性が実現します。

NGINXやNGINX Plusが期限切れコンテンツを提供する条件を構成するには、ディレクティブを指定するか、オリジンサーバーのCache-Controlヘッダー、stale-while-revalidatestale-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管理者ガイド」やドキュメントを参照してください。

関連資料

高性能キャッシュ NGINX & NGINX Plusの活用

EBOOK

高性能キャッシュ NGINX & NGINX Plusの活用

NGINXとNGINX Plusを利用したウェブアプリケーション向け高性能キャッシングとキャッシュクラスタリングの実装

 
APIゲートウェイとしてのNGINX Plusのデプロイ

EBOOK

APIゲートウェイとしてのNGINX Plusのデプロイ

このEBOOKでは、NGINXネイティブ機能をAPIゲートウェイで使用するメリットについて詳しくご紹介します。ここでは、正しい環境の設定方法、APIゲートウェイの使用、セキュリティー保護、gRPCサービスの公開方法について順を追って説明します。

 
マイクロサービス リファレンス アーキテクチャ

EBOOK

マイクロサービス リファレンス アーキテクチャ

この無料EBOOKでは、NGINXのマイクロサービス リファレンス アーキテクチャに関して、どのようにマイクロサービスを接続、保護、拡張をしていくのか説明します。