web-dev-qa-db-ja.com

Apacheキャッシングと有効期限の構成

特定の状況に最適なキャッシュ/有効期限の構成を探しています。

一部のサイトがetagをオフにすることを推奨していることを認識しています:ヘッダー未設定ETag、FileETagなし

ExpiresまたはCache-Controlのいずれかを使用する必要があることを知っています。さらに、Last-modifiedまたはETAG(Per ySlow docs)のいずれかを使用する必要があることを私は知っています。

.htaccessで以下を使用するクライアントサーバーを継承しました。

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|xml|txt|html|htm)$">
Header set Cache-Control "max-age=172800, public, must-revalidate"
</FilesMatch>

このサーバーでは、Webアプリケーションの画像、css、jsの名前を変更するためにスタッフに頼ることができないので、「ほとんど/すべて」ということを(確実に)知らずに、将来的に有効期限を設定したくありません。 「ブラウザは、コンテンツが変更されたかどうかを確認します。私が起こりたくないのは、誰かが私に電話して、画像が置き換えられて表示されないためにWebサイトが壊れていると言うことです。

しかし、ほとんどすべてのブラウザーがサーバーにコンポーネントが変更されているかどうかを確認することを維持しながら、キャッシュと期限切れで可能な限り最大限の利点を活用したいと思います。

.htaccessファイルとApache.confファイルの両方にアクセスできますが、これは単一のサーバーであり、コンテンツは複数のサーバーにデプロイされていません。

このクライアントサーバーの目標を達成するために最適な.htaccessまたは.conf構成は何ですか?

ご協力いただきありがとうございます

1
mcondiff

ロードバランサーを使用するときにeTagを推奨しない人もいますが、eTagをオンにする必要があります。

Yoruコンテンツの有効期限が切れてキャッシュされる場合は、mod_expiresを使用して、どのリソースとその年齢を構成することができます。または、これをこのhttpd.confに設定できます

ヘッダーセットCache-Control "max-age = 63072000、public"

これで、応答ヘッダーが表示されると、経過時間のあるCache-Controlが表示されます。私はそれを2年間設定しました

> Cache-Control:max-age=63072000, public Connection:close Date:Thu, 22
> Oct 2015 17:09:31 GMT ETag:"2b7e6-a9777-523307081ff00"
> Server:Apache/2.2.3  Vary:Accept-Encoding,User-Agent
1
skillguru

基本的に、サーバーがEtagおよびLast-Modifiedヘッダーを送信することを確認し(クライアントが実際にダウンロードせずにリソースが変更されたかどうかを確認できるようにします)、将来的にはExpiresおよびCache-Control: max-ageヘッダーを設定しますすることができますように。静的コンテンツの名前を変更せずに変更する場合は、通常のブラウジングセッション(15分など)をカバーするように設定するのが最善の方法です。

0
mgorven