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秒ごとに更新する必要があります。
答える:
バケットに書き込むデータの種類と方法の詳細を入力してください-> m3u8
ストレージバケット->スケーラブルなインフラストラクチャの共有リソースを使用して何を達成したいですか
5秒ごとに要素を更新する必要があるのはなぜですか-> 1秒ごとにm3u8を更新する必要があります(インデックスを更新するため)
それが問題です。
ドキュメントをご覧ください 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ファイルを保存してみてください。
GCSオブジェクトメタデータのCache-Controlヘッダーを(例)public, max-age=5
に設定します
これにより、Cloud CDNは5秒間キャッシュし、その後Origin(バケット)から再フェッチするように指示されます。
新しいオブジェクトをプッシュするときに、アップロード/ API経由でこれを行うことができます: https://cloud.google.com/storage/docs/gsutil/addlhelp/WorkingWithObjectMetadata