Apache HTTP インフラ

Apacheに静的ファイルをキャッシュさせる方法(Webサーバとブラウザキャッシュ合わせて)

投稿日:2018年3月5日 更新日:

こんにちは!シミダイ(@shimidai2100)です。

Webサイトのサンプルを作成時には、静的HTML→CSM(Wordpressなど)となるケースが多いと思います。

その場合ファイルサイズが多くなってしまったり、ヘッダー情報がキャッシュに乗っていなかったりと性能が悪い時があります。

そんな時にはApacheで静的ファイルキャッシュさせて、性能を上げましょう。

※今回の手順はWebサーバの性能問題を解決するための、ゴリゴリのチューニング方法は乗っていません。


検証した環境

今回のインストール環境は以下になります。

  • CentOS:CentOS Linux release 7.0.1406 (Core)
  • Apache/2.4.6 (CentOS)

Apacheでキャッシュ機能を有効化する

キャッシュ前の準備

まずはキャッシュ格納先ディレクトリを作成します。

念のためcacheファルダにすべての権限を付与しておきましょう。

Apacheの設定

次に「/etc/httpd/conf/httpd.conf」にキャッシュのためのモジュールをロードします。

↓を追記します。

cache_module」はキャッシュ機能そのものです。

cache_disk_module」はディスクキャッシュ機能になります。

さらに「/etc/httpd/conf/httpd.conf」にモジュールの動作を記載します。

では、各ディレクティブについて解説していきます。

CacheRoot(必須)

キャッシュを格納するディレクトリをフルパスで記載します。

CacheEnable(必須)

キャッシュ対象とするパスを指定します。

CacheDirLevels

キャッシュのサブディレクトリの深さの数を記載します。

CacheDirLength

サブディレクトリ名の文字数を指定します。

CacheIgnoreCacheControl

no-cache ヘッダや Pragma: no-store ヘッダであっても、キャッシュを使用してレスポンスをします。

no-cache ヘッダや Pragma: no-store ヘッダを無視するという意味になります。

CacheIgnoreNoLastMod

通常はLast-Modified による最終修正時刻の無いドキュメントはキャッシュされませんが、有効化するとキャッシュされるようになります。

CacheDefaultExpire

キュメントに 有効期限 (expiry) や最終修正時刻 (last-modified) が指定されていない場合の デフォルトの時間を指定します。

」で指定する点に注意してください。

CacheMaxExpire

キャッシュする HTTPドキュメントを、元のサーバに問い合わせないまま最大何秒保持してもよいかを指定します。

つまり、ドキュメントは最大で秒数間保存するかを指定します。

」で指定する点に注意してください。

Apache設定を有効

Apacheの設定ファイルの構文が正しいか確認します。

↓が実行ログになります。

※私の環境では、「/etc/httpd/conf.modules.d/00-base.conf」でcache_moduleをロードしてました(汗)

次にhttpdを再起動させます。

↓が実行ログになります。

無事再起動されました。

キャッシュされているか確認してみる

Webページにアクセスした後、「/var/www/cache/」にキャッシュファイルが作成されているか確認してみます。

しっかりディレクトリとファイルが作成されていました。これでキャッシュが効いていることが確認できました。

「.header」ファイルにはヘッダー情報が、「.data」ファイルにはhtmlファイルと画像ファイルが格納させれいることが確認できました。

おまけ:ブラウザに静的ファイルをキャッシュさせる

それでも性能が出ない時には、クライアントのブラウザに無理やりキャッシュさせましょう。

※この設定はクライアントに負担がかかるためオススメはできません。

画像ファイルやJavaScriptでも「ExpiresByType 」ディレクティブを使用すればキャッシュさせることができます。

 

スポンサードリンク

関連記事

-Apache, HTTP, インフラ

Translate »

Copyright© shimidai2100 , 2018 All Rights Reserved.