web-dev-qa-db-ja.com

帯域幅を節約するためにmod_rewriteでCloudflareのようなCDNを使用する

CloudflareのようなCDNは、静的ファイルを画像、JS、CSSファイルとしてキャッシュすることで帯域幅を節約できることを知っています。

その場で画像を生成するスクリプトがあり、その場所は次のようになります。

http://domain.com/image.php?id=1

idが画像IDです。動的URLのため、Cloudflareはこれらの画像をキャッシュしません。 mod rewriteルールを追加して、URLを次のように書き換えるとします。

http://domain.com/images/1

または

http://domain.com/images/1.jpg

この場合、CloudFlareは画像をキャッシュしますか、それとも画像は実際にはディレクトリに存在する実際のファイルである必要がありますか?

3
Michael Samuel

CloudFlareの特定のエンドポイントですべてをキャッシュする最も簡単な方法は、 すべてをキャッシュするページルール を使用することです。アスタリスクはワイルドカードの結果と一致します。したがって、最初の例では、次のことができます。

CloudFlare Cache Everything on endpoint

キャッシュすべてはページルールを使用してのみ有効にできるため、上記の例はほとんどの場合に最適ですが、クエリ文字列の処理方法に関してCloudFlareで一般的なルールを設定することもできます。

これは、CloudFlareダッシュボードの[キャッシュ]タブでグローバルに実行できます。デフォルトでは、標準オプションはクエリ文字列によって変化するリソースをキャッシュします。

Set Caching Level in CloudFlare

4
mjsa

私はあなたの質問の終わりから始めて、私の方法を掘り下げます。したがって、まず第一に、プロキシ(Cloudflareは1つのように機能します)が静的コンテンツとオンザフライで生成されたコンテンツを区別する方法はありません。応答は実質的に同じです。唯一の違いは、要求されたファイルの拡張子と、サーバーから送信されたキャッシュルールに従うことです。 Cloudflareはデフォルトで 特定の拡張子 のファイルのみをキャッシュします。

そうは言っても、はい、両方の例がCloudflareによってキャッシュされます( ただし Cache-Controlヘッダーが "private"、 "no-store"、 "no-cache"、または "max-に設定されている場合を除くage = 0 "、または応答にCookieがある場合)。

もう1つは、デフォルトでは、Cloudflareは クエリ文字列 でリクエストをキャッシュすることです。クエリ文字列が変更されるたびに異なるリソースを配信します。拡張子が正しいか、ページルールで拡張子に関係なくキャッシュするように明示的に指定されている限り、クエリ文字列を使用しても問題はありません。

3
BorysekOndrej