Apache で Web キャッシュポリシーを設定すると、ブラウザや CDN (コンテンツ配信ネットワーク) などの仲介プロキシがダウンロード済みのリソースを再利用できるため、不要なネットワークリクエストが減少します。結果として、ページの読み込み速度の向上、サーバー負荷および帯域幅消費の削減につながります。
免責事項: このトピックには、サードパーティ製品に関する情報が含まれている場合があります。Alibaba Cloud は、サードパーティ製品のパフォーマンスや信頼性について、いかなる表明も保証も行いません。これらの製品の使用から生じる潜在的な影響については、お客様が責任を負うものとします。
Apache モジュールの選択
Apache モジュール | メリット | デメリット | 適用シナリオ |
| シンプルな構文で、様々なファイルタイプに対して有効期限を迅速に設定可能です。 | 機能が限定されているため、 | ブラウザや CDN にファイルのキャッシュ期間 ( |
| HTTP ヘッダーを完全に制御可能で、 |
| きめ細かく包括的なキャッシュ戦略が求められる本番環境。 |
操作手順
モジュールの有効化
キャッシュポリシーを設定する前に、Apache で headers および expires モジュールが有効になっていることを確認してください。
モジュールがロードされているか確認するには、
apachectl -Mまたはhttpd -Mコマンドを実行します。出力リストにheaders_moduleとexpires_moduleが含まれていることを確認してください。モジュールを有効化します。
Debian/Ubuntu の場合:
sudo a2enmod headers expires sudo systemctl restart apache2CentOS/RHEL/Alibaba Cloud Linux の場合: これらのモジュールは通常、デフォルトでコンパイルまたはロードされます。見つからない場合は、
/etc/httpd/conf.modules.d/ディレクトリ内の設定ファイルを確認し、LoadModuleの行がコメントアウトされていないことを確認してください。
設定ファイルの場所の選択
キャッシュ設定は、専用のファイルにまとめるか、サイトの VirtualHost ブロックに保存できます。
推奨: CentOS/RHEL の場合は
/etc/httpd/conf.d/ディレクトリに、Debian/Ubuntu の場合は/etc/apache2/conf-available/ディレクトリにcache.confなどの新しいファイルを作成します。非推奨:
.htaccessファイルでの設定は避けてください。Apache はリクエストごとに.htaccessを読み込んで解析する必要があるため、不要なパフォーマンスオーバーヘッドが発生します。
設定例
グローバルデフォルトキャッシュ有効期限の設定
mod_expires
<IfModule mod_expires.c>
# mod_expires 機能を有効にする
ExpiresActive On
# すべてのリソースのデフォルトキャッシュ時間を 1 日に設定する
ExpiresDefault "access plus 1 day"
</IfModule>mod_headers
<IfModule mod_headers.c>
# Cache-Control ヘッダーを設定する。キャッシュ時間は 1 日
Header set Cache-Control "max-age=86400, public"
</IfModule>ファイルタイプ別のキャッシュポリシー設定
mod_expires
<IfModule mod_expires.c>
# mod_expires 機能を有効にする
ExpiresActive On
# デフォルトのキャッシュ時間を 1 日に設定する
ExpiresDefault "access plus 1 day"
# 画像リソースを 1 か月間キャッシュする
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
# CSS および JS ファイルを 1 週間キャッシュする
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/javascript "access plus 1 week"
</IfModule>mod_headers
<IfModule mod_headers.c>
# 画像リソースを 1 か月間キャッシュする
<FilesMatch "\.(jpg|jpeg|png|gif|svg)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
# CSS および JS ファイルを 1 週間キャッシュする
<FilesMatch "\.(css|js)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
</IfModule>特定のリソースタイプのキャッシュ無効化
mod_expires
<IfModule mod_expires.c>
# mod_expires 機能を有効にする
ExpiresActive On
# HTML ファイルをキャッシュしない
ExpiresByType text/html "access plus 0 seconds"
</IfModule>mod_headers
<IfModule mod_headers.c>
# HTML ファイルのキャッシュを無効にする
<FilesMatch "\.html$">
Header set Cache-Control "no-store, no-cache, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "0"
</FilesMatch>
</IfModule>カスタムキャッシュポリシーの設定
以下の mod_expires と mod_headers の構文ルールを使用してポリシーをカスタマイズできます。
mod_expires
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "base_time plus time_unit"
ExpiresByType mime_type "base_time plus time_unit"
</IfModule>ExpiresActive On:mod_expiresモジュールを有効にします。ExpiresDefault: タイプが定義されていないすべてのリソースのデフォルトキャッシュ時間を設定します。ExpiresByType: 特定の Multipurpose Internet Mail Extensions (MIME) タイプのキャッシュ時間を設定します。mime_type: ファイル形式を定義する MIME タイプ (例:image/jpeg、image/gif、text/css、text/html) 。メインタイプとサブタイプをスラッシュで区切って指定します。base_time: キャッシュの基準時間。通常はaccess(ユーザーがファイルにアクセスしたとき) またはmodification(ファイルが最終変更されたとき) です。time_unit: 時間単位。例:secondsminuteshoursdaysweeksmonthsyears
mod_headers
<IfModule mod_headers.c>
Header set|append|unset header_name "value"
</IfModule>Header set: 指定された HTTP ヘッダーフィールドの値を設定します。Header append: 既存の値にコンテンツを追加します。Header unset: 指定された HTTP ヘッダーフィールドを削除します。header_name:Cache-ControlやExpiresなど、操作対象の HTTP ヘッダーフィールド名。value: 設定する値。
設定の検証と適用
設定変更後は、サービスの中断を防止するため、構文をチェックしてから、サービスを再読み込みしてください。
設定構文のチェック:変更を適用する前に、構文チェックコマンドを実行してエラーがないことを確認します。
CentOS/RHEL/Alibaba Cloud Linux:
sudo httpd -tDebian/Ubuntu:
sudo apache2ctl -t
出力が
Syntax OKであれば、次に進めます。設定の適用 (グレースフルリロードを推奨):
reloadコマンドを使用すると、既存の接続を切断せずに新しい設定を適用できます。CentOS/RHEL/Alibaba Cloud Linux:
sudo systemctl reload httpdDebian/Ubuntu:
sudo systemctl reload apache2
参考: Web キャッシュの仕組み
Web キャッシュを理解することは、Apache を正しく設定するのに役立ちます。Web キャッシュは、主に強力なキャッシュとネゴシエーションキャッシュの 2 種類に分けられます。
強力なキャッシュ: ブラウザがリソースをリクエストする際、まずローカルキャッシュを確認します。キャッシュが期限切れでない場合 (
Cache-Controlのmax-ageディレクティブ、またはExpiresヘッダーで判定)、ブラウザはサーバーに接続せずにローカルキャッシュからリソースをロードします。HTTP ステータスコードは通常、200 (from disk cache)または200 (from memory cacheです。これは最も効率的なキャッシュ方法です。ネゴシエーションキャッシュ: 強力なキャッシュが無効 (期限切れ) または設定されていない場合、ブラウザはサーバーに条件付きリクエストを送信して、キャッシュされたバージョンがまだ有効かどうかをチェックします。このプロセスには以下のステップが含まれます。
ブラウザは、ヘッダーにキャッシュ識別子 (以前のレスポンスの
ETag値を持つIf-None-Matchや、以前のレスポンスのLast-Modified日付を持つIf-Modified-Sinceなど) を含めてリクエストを送信します。サーバーはこれらの識別子をリソースの現在のバージョンと比較します。
リソースが変更されていない場合、サーバーは空のレスポンス本文とともに
304 Not ModifiedHTTP ステータスコードを返します。ブラウザはその後、ローカルの古いコピーを引き続き使用します。リソースが更新されている場合、サーバーは新しいリソースコンテンツとともに
200 OKHTTP ステータスコードを返します。
Apache を設定することで、以下の主要な HTTP レスポンスヘッダーを制御して、キャッシュポリシーを実装できます: