Apacheでキャッシュを無効化する方法

ウェブサイトを運営する際、ブラウザにキャッシュを保持させることで
ページの読み込み速度を改善できます。
しかし、状況によっては、キャッシュを無効化したい場合もあります。
例えば、頻繁に更新されるサイトや、リアルタイムで変更が反映される必要があるページの場合、
古いキャッシュが残っているとユーザーに最新のコンテンツが表示されません。

この記事では、Apacheサーバーでキャッシュを無効化する方法について解説します。

.htaccess ファイルとは

.htaccess ファイルは、Apacheサーバーの設定をディレクトリ単位で上書きできるファイルです。
これにより、特定のディレクトリに対してキャッシュの有効期限を指定したり、無効にする設定が可能です。

Apacheのキャッシュ制御

まず、一般的に使われるキャッシュの設定方法について見てみましょう。
mod_expiresモジュールを使用して、特定のファイルタイプに対してキャッシュの有効期限を設定できます。
以下の例では、CSSやJavaScript、画像ファイルのキャッシュ期限を設定しています。

<ifmodule mod_expires.c>
ExpiresActive On
ExpiresByType text/html "access plus 3 days"
ExpiresByType text/css "access plus 3 days"
ExpiresByType text/javascript "access plus 1 weeks"
ExpiresByType image/jpg "access plus 2 weeks"
ExpiresByType image/png "access plus 2 weeks"
ExpiresByType image/x-icon "access plus 1 month"
</ifmodule>

この例では、HTMLファイルは3日、CSSやJavaScriptは1週間、画像ファイルは2週間、
ファビコンは1ヶ月間キャッシュされます。

キャッシュを無効化する設定

キャッシュを完全に無効化するためには、
以下のように有効期限をすべてゼロに設定することが考えられます。

<ifmodule mod_expires.c>
ExpiresActive On
ExpiresByType text/html "access plus 0 days"
ExpiresByType text/css "access plus 0 days"
ExpiresByType text/javascript "access plus 0 weeks"
ExpiresByType image/jpg "access plus 0 weeks"
ExpiresByType image/png "access plus 0 weeks"
ExpiresByType image/x-icon "access plus 0 month"
</ifmodule>

この設定では、ブラウザがファイルをキャッシュしても、
次回アクセス時に必ずサーバーから最新のファイルを取得します。
ただし、キャッシュを「完全に」無効化するわけではなく、
キャッシュの有効期限を「ゼロ」にすることで、事実上毎回新しいリソースを読み込む動作となります。

完全にキャッシュを無効化する方法

より確実にキャッシュを無効化したい場合は、以下のCache-Controlヘッダーを使用する方法が推奨されます。この設定では、ブラウザに対してキャッシュを一切作成させないよう指示します。

<ifmodule mod_headers.c>
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "0"
</ifmodule>

この設定により、キャッシュが完全に無効化され、常にサーバーから最新のファイルを取得するようブラウザに指示することができます。

キャッシュ制御の注意点

キャッシュを無効化すると、常にサーバーから新しいファイルが読み込まれるため、
サーバーの負荷が増加する可能性があります。
また、ユーザーのページ読み込み速度が遅くなることもあります。
そのため、キャッシュを無効化する際は、特定のファイルやディレクトリに限定するか、
適切な期間でキャッシュを設定することが推奨されます。

これで、Apacheサーバーでキャッシュを制御する方法について理解できたと思います。
必要に応じて、これらの設定をカスタマイズし、最適なパフォーマンスを実現しましょう。