トラブルシューティング

Cloud CDN の使用中に次の問題が発生したときに役立つトラブルシューティング手順について説明します。

一般的な問題と解決策

レスポンスがキャッシュに保存されない

レスポンスがキャッシュに保存されない場合は、初めに、バックエンド サービスまたはバックエンド バケットに対して Google Cloud CDN が有効化されていることを確認してください。Cloud CDN を有効にしてから、レスポンスがキャッシュに保存されるようになるまでに数分ほどかかることがあります。

Cloud CDN がキャッシュに保存するのは、公開に設定され、有効期限または最長存続期間が指定されているレスポンスだけです。この情報は、HTTP レスポンス ヘッダーで指定されます。ある URL のレスポンスがキャッシュに保存されない場合は、その URL をリクエストしたときにどの HTTP ヘッダーが返されるかを調べてください。

レスポンス ヘッダーを確認する方法は複数あります。

次の例では、curl を使用して http://example.com/style.css の HTTP レスポンス ヘッダーを確認しています。

$ curl -s -D - -o /dev/null http://example.com/style.css
HTTP/1.1 200 OK
Date: Tue, 16 Feb 2016 12:00:00 GMT
Content-Type: text/css
Content-Length: 1977
Via: 1.1 google

$

これらのヘッダーとキャッシュの詳細で説明している要件を比較すると、必須の Cache-Control ヘッダーがレスポンスの中にないことがわかります。

ヘッダーを設定する方法は、送信元サーバーのタイプによって異なります。ウェブサーバーが Google Compute Engine 上で稼働している場合は、ウェブ サーバー ソフトウェアのドキュメントに記載されているレスポンス ヘッダーの構成方法をご覧ください。Google Cloud Storage の場合は、オブジェクトが一般公開と設定されていれば適切なヘッダーが送信されます。

送信元サーバーの構成を変更して必須のヘッダーを追加した後に、curl を使用してもう一度結果を調べます。

$ curl -s -D - -o /dev/null http://example.com/style.css
HTTP/1.1 200 OK
Date: Tue, 16 Feb 2016 12:00:30 GMT
Content-Type: text/css
Content-Length: 1977
Cache-Control: max-age=86400,public
Via: 1.1 google

$ curl -s -D - -o /dev/null http://example.com/style.css
HTTP/1.1 200 OK
Date: Tue, 16 Feb 2016 12:00:31 GMT
Content-Type: text/css
Content-Length: 1977
Cache-Control: max-age=86400,public
Via: 1.1 google

$ curl -s -D - -o /dev/null http://example.com/style.css
HTTP/1.1 200 OK
Date: Tue, 16 Feb 2016 12:00:30 GMT
Content-Type: text/css
Content-Length: 1977
Cache-Control: max-age=86400,public
Via: 1.1 google
Age: 2

$

この例の最後のレスポンスに Age ヘッダーが含まれています。Cloud CDN は、キャッシュから提供されたレスポンスに Age ヘッダーを追加します。このヘッダーは、2 秒前に再生されたキャッシュ エントリを使用して、レスポンスがキャッシュから正常に提供されたことを表しています。

非公開コンテンツがキャッシュに保存されるか、キャッシュに保存されたコンテンツが正しくない

送信元サーバーから非公開または正しくないコンテンツが配信される理由がわかっていて、問題を解決できる場合は、次の手順で Cloud CDN のキャッシュを無効にしてください。

  1. 送信元サーバーから、非公開または正しくないコンテンツが返されなくなっていることを確認します。
  2. キャッシュの無効化をリクエストします。これは、キャッシュ済みコンテンツの配信を停止するよう Cloud CDN に指示することです。

詳細については、キャッシュの無効化ページをご覧ください。

Cloud CDN は、公開でキャッシュ可能に設定されたレスポンスだけをキャッシュに保存し、レスポンスに指定された有効期限までキャッシュからレスポンスを提供します。コンテンツがキャッシュに保存された理由がわからない場合や、問題をすぐに解決できない場合は、問題を把握して修正するまで Cloud CDN を無効にし、修正後に再度有効にすることもできます。キャッシュに保存されるコンテンツと保存期間についてはキャッシュの詳細を参照してください。

キャッシュ ヒット率が低いか、同じコンテンツに複数のキャッシュ フィルが存在する

バックエンド サービスまたはバックエンド バケットのキャッシュ ヒット率が期待よりも低い場合は、その URL に対するレスポンスがキャッシュに保存されていることを確認してください

Cloud CDN は完全なリクエスト URI をキャッシュキーに組み込みます。したがって、http://example.com/cat.jpg?1 と http://example.com/cat.jpg?2 は別のキャッシュ エントリになります。特定のリソースに常に 1 つの URL を使用すると、キャッシュ ヒット率を改善できます。キャッシュ可能なページで実行されている JavaScript にパラメータを渡す必要がある場合は、クエリ文字列ではなくフラグメント識別子の使用を検討してください。また、必要な場合にのみ Vary レスポンス ヘッダーを使用すると、キャッシュ ヒット率を改善できます。キャッシュキーの詳細については、キャッシュの詳細を参照してください。

通常、キャッシュ可能なレスポンスの有効期限を長くすると、キャッシュ フィルの数を減らすことができます。他の条件がすべて同じ場合、Cache-Control: public, max-age=1 よりも Cache-Control: public, max-age=86400 のレスポンスのほうがキャッシュ フィルが少なくなります。有効期限の詳細については、キャッシュの詳細を参照してください。また、適切なレスポンス ヘッダーの設定方法については、ウェブサーバー ソフトウェアのドキュメントを参照してください。Cloud CDN は世界各地で多くのキャッシュを運用しています。新しいコンテンツを保存するため、古いキャッシュ エントリは定期的に削除されています。このため、通常のオペレーションでリソースごとに複数のキャッシュ フィルが存在していることもあります。

圧縮が機能しない

Cloud CDN が圧縮や圧縮解除を行うことはありませんが、送信元サーバーで生成されたレスポンスが gzipDEFLATE などのエンコーディングで圧縮されていてもそのレスポンスを配信できます。

Cloud CDN から配信されるレスポンスが圧縮されるはずであるのに圧縮されていない場合は、インスタンス上で稼働しているウェブサーバー ソフトウェアがレスポンスを圧縮するように構成されていることを確認してください。一部のウェブサーバー ソフトウェアのデフォルト設定では、リクエストに Via ヘッダーが含まれている場合にリクエストの圧縮が自動的に無効になります。Via ヘッダーが存在する場合は、そのリクエストがプロキシによって転送されたことを示します。HTTP(S) 負荷分散などの HTTP プロキシは、HTTP 仕様の要件に従って Via ヘッダーを各リクエストに追加します。圧縮を有効にするには、ウェブサーバーのデフォルトの設定を変更し、リクエストに Via ヘッダーがある場合でもレスポンスを圧縮するように設定します。

nginx ウェブサーバー ソフトウェアを使用している場合に圧縮を有効にするには、nginx.conf 構成ファイルに変更を加えます。このファイルの場所は、nginx をインストールした場所によって異なります。多くの Linux ディストリビューションでは、このファイルは /etc/nginx/nginx.conf に保存されています。HTTP(S) 負荷分散で nginx 圧縮を有効にするには、nginx.conf の http セクションに次の 2 行を追加します。

gzip_proxied any;
gzip_vary on;

最初の行を追加すると、HTTP(S) 負荷分散などのプロキシから転送されたリクエストでも圧縮が有効になります。2 番目の行により、レスポンスに Vary: Accept-Encoding ヘッダーが追加されます。Vary: Accept-Encoding は、圧縮可能なリソースの圧縮バリアントと非圧縮バリアントに別々のキャッシュ エントリを維持するように、Cloud CDN などのキャッシュ プロキシに通知します。

nginx.conf を変更した後で新しい設定を使用するには、nginx を再起動する必要があります。多くの Linux ディストリビューションでは、sudo service nginx restart または /etc/init.d/nginx restart を実行して nginx を再起動します。

レスポンスが byte_range_caching_aborted エラーで終了する

Cloud CDN は、複数のバイト範囲リクエストからレスポンスを収集する際に、レスポンス ヘッダー ETag と Last-Modified の値を比較して、それらの範囲が同じバージョンのリソースにあるかどうかを確認します。いずれかのヘッダーの値がクライアントに配信済みの範囲と一致していない場合は、レスポンスを中止します。

予期せず終了したレスポンス、byte_range_caching_aborted statusDetails が含まれる Stackdriver Logging ログエントリ412 Precondition Failed レスポンスを返すインスタンスがある場合は、すべての VM インスタンスで実行されているウェブサーバー ソフトウェアが、特定のリソースに対して同じ ETag 値と Last-Modified 値を返しているかを確認します。

ディスクからファイルを配信する場合、通常、ウェブサーバー ソフトウェアはファイルの変更時刻から ETag 値と Last-Modified 値を取得します。この場合は、すべてのインスタンスで同じイメージを使用することで、VM インスタンスが一貫した値を報告するようにできます。ETag 値と Last-Modified 値を特定する仕組みの詳細については、ウェブサーバー ソフトウェアのドキュメントをご覧ください。

エラー メッセージ

キャッシュ無効化エラー
エラーコード
Invalid value for field 'resource.path' パス値の形式が無効です。パスは / で始めてください。パスに ? または # を入れることはできません。複数の * を使用することはできません。この文字は / の後に使用する必要があります。パスは 1,024 文字以下にする必要があります。このエラーが発生した場合は、パスの値を確認して、フォーマット エラーを修正してください。
(このエラーが示しているのはパスの形式のみです。形式が有効であれば、存在しないパスも有効とされます。)
Rate Limit Exceeded Cloud CDN では、キャッシュ無効化オペレーションの実行頻度に制限を設けています。1 分間に実行できる無効化オペレーションは 1 回だけです。ただし、1 回のオペレーションで、任意の数のオブジェクトに一致するパスパターンを指定できます。

既知の問題

Cloud CDN について報告されている問題と制限は次のとおりです。

  • キャッシュの無効化に制限があります。1 分間に 1 つの URL マップに実行できる無効化は 1 回だけです。
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud CDN のドキュメント