web-dev-qa-db-ja.com

Cloud CDNがキャッシュされた要素を提供しないようにしますか?

CloudCDNに問題があります。インスタンスに接続されたバケットにCDNを追加しました。

CDNから要素を取得する必要がありますが、この要素はサーバーから1秒ごとに更新されます。何が起こるかというと、ブラウザから最初に正しいファイルを取得できるときに、ファイルが再度更新されることはありません(ファイルはm3u8であり、常に同じです)

M3u8ファイルはバケットで更新されますが、クラウドCDNでは更新されません。クラウドCDN内の特定の種類のファイル(またはすべてのファイル)でのキャッシュを防ぐにはどうすればよいですか?

更新:

正直なところ、バケットから直接応答ヘッダーを確認すると、「cache-control:public、max-age = 3600」が表示されます。問題はバケットであると考え始めます。バケット全体のmax-ageを0/1に設定するにはどうすればよいですか? ?

追伸私のファイルはすべて公開されており、これを読んでいます( https://cloud.google.com/storage/docs/gsutil/commands/setmeta ):

注:デフォルトでは、パブリックに読み取り可能なオブジェクトにはCache-Controlヘッダーが提供され、そのようなオブジェクトを3600秒間キャッシュできます。このデフォルトの動作の詳細については、gsutilヘルプメタデータのCACHE-CONTROLセクションを参照してください。更新がすぐに表示されるようにする必要がある場合は、そのようなオブジェクトに「Cache-Control:private、max-age = 0、no-transform」のCache-Controlヘッダーを設定する必要があります。

毎秒cronからこのようなコマンドを実行するのは避けたいだけです

    gsutil setmeta -h "Content-Type:text/html" \
  -h "Cache-Control:public, max-age=0, no-transform" gs://bucket/*.html

バケット全体を直接管理するための一般的な設定はありませんか? (ロードされたコンテンツごとではありません)

[〜#〜] update [〜#〜]:ライブストリーミング(rtmp)用のnginxサーバーです。

品質ごとに他のm3u8のインデックスを持つm3u8を入手しました。

(gcsfuseを使用して)GCEインスタンスにバケットをマウントすると、ブラウザーからバケットから取得した最初のm3u8は、キャッシュのために1時間バケット内にキャッシュされたままになります(max-age = 3600)。

GCEからのファイルはgsutilで更新されません:gcsfuseを使用してマウントされたバケットに直接書き込まれます。

このファイルを公開するために、バケットを公開に設定しました->これは、Googleバケットポリシーの場合、キャッシュ可能にします。

理論的には、すべてのm3u8ファイルを1秒ごとに更新する必要があります。

答える:

  1. バケットに書き込むデータの種類と方法の詳細を入力してください-> m3u8

  2. ストレージバケット->スケーラブルなインフラストラクチャの共有リソースを使用して何を達成したいですか

  3. 5秒ごとに要素を更新する必要があるのはなぜですか-> 1秒ごとにm3u8を更新する必要があります(インデックスを更新するため)

それが問題です。

1
tidpe

ドキュメントをご覧ください Cloud Storage Fuse セクション POSIXファイルシステムとの主な違い

メタデータ:Cloud Storage Fuseは、Cloud Storageにアップロードするときに、ファイルと一緒にメタデータを転送しません。つまり、Cloud Storage Fuseをアップロードツールとして使用する場合、他のアップロード方法の場合とは異なり、コンテンツタイプやACLなどのメタデータを設定することはできません。メタデータのプロパティが重要な場合は、gsutil、JSON API、またはGoogle CloudConsoleの使用を検討してください。

一方、 ドキュメントにあるように、デフォルトのポリシーを変更するには、メタデータを使用する必要があります。

オブジェクトのアップロード中にメタデータを設定する方法、設定できるメタデータフィールド、およびこれらのフィールドの意味の詳細については、 gsutilヘルプメタデータ を参照してください、カスタムメタデータの使用、および現在設定されているメタデータの表示方法。

Cloud Storage Fuseを使用しているため、オブジェクトのアップロード中にメタデータを設定できません。その結果、m3u8ファイルはデフォルトのキャッシュポリシーの影響を受けます。

デフォルトでは、パブリックに読み取り可能なオブジェクトにはCache-Controlヘッダーが提供され、そのようなオブジェクトを3600秒間キャッシュできます。

一時的な回避策として、setmetaコマンドを使用して アップロード済みのオブジェクトにメタデータを設定 :を試すことができます。

gsutil setmeta -h "Content-Type:text/html" -h "Cache-Control:public, max-age=0, no-transform" gs://bucket/*.html

しかしそれは多くの操作を引き起こし、その結果、 使用コストを増加させます。

この問題を解決するには、サービスのアーキテクチャを変更する必要があります。たとえば、 Cloud Filestore を使用してm3u8ファイルを保存してみてください。

1
Serhii Rohoza

GCSオブジェクトメタデータのCache-Controlヘッダーを(例)public, max-age=5に設定します

これにより、Cloud CDNは5秒間キャッシュし、その後Origin(バケット)から再フェッチするように指示されます。

新しいオブジェクトをプッシュするときに、アップロード/ API経由でこれを行うことができます: https://cloud.google.com/storage/docs/gsutil/addlhelp/WorkingWithObjectMetadata

0
elithrar