カテゴリー
サーバー

mod_cache_diskのうっかり設定

Apache2.4のキャッシュ機能を使いたいと長年願い続けていました。少し前のOSのアップグレードの時だったか、mod_eventとphp-fpmを導入した時だったか、何かのきっかけでmod_cache_diskを設定しました。

それが約半年前。

そして昨日、当ウェブサイトに問題が起きました。

・・・というのはわたしの誤解で、実は使い始めたAndroid版Firefoxのキャッシュの問題だったようですが、瓢箪から駒が出る如く設定の誤りの修正に至りました。

あるべき設定に直す

わたしは混乱した頭でログを漁りました。

あれこれ見た結果、ウェブサーバーのエラーログに以下の警告が出ていたことから、Apacheのキャッシュに何かが起きていることを察知しました。

Premature end of cache headers.

httpd.confの該当箇所を見てみると、なぜかCacheSocacheMaxSizeというmod_cache_socacheの設定が混ざっていました。使っているのはmod_cache_diskなのに!

それをまず書き直しました。

#LoadModule cache_socache_module libexec/apache24/mod_cache_socache.so
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CacheEnable disk /
CacheRoot   /var/cache/www
CacheMaxFileSize 20971520
CacheDirLevels 4
CacheDirLength 5

キャッシュにはクリアが必要だ

mod_cache_diskのドキュメントを見てみるとhtcachecleanというツールがあることを初めて知りました。

コマンドで打ってもうまく動かないので、デーモンの起動を試すことにしました。しかし以下のエラーが出て動きません。/etc/rc.conf の htcacheclean_flags に記述した -p オプションが効きません。

/usr/local/etc/rc.d/htcacheclean: WARNING: /usr/local/www/proxy is not a directory.

起動スクリプト /usr/local/etc/rc.d/htcacheclean を開いてみたところ、オプションの書き方が誤っていました。以下に抜粋します。

# less /usr/local/etc/rc.d/htcacheclean
htcacheclean_enable="${htcacheclean_enable:-"NO"}"
htcacheclean_cache="${htcacheclean_cache:-"/usr/local/www/proxy"}"
htcacheclean_cachelimit="${htcacheclean_cachelimit:-"512M"}"
htcacheclean_interval="${htcacheclean_interval:-"60"}"
htcacheclean_args="${htcacheclean_args:-"-t -n -i"}"

これに倣って、以下のようにしました。

# vi /etc/rc.conf
htcacheclean_enable="YES"
htcacheclean_cache="/var/cache/www"
htcacheclean_cachelimit="256M"
htcacheclean_interval="60"

起動はいつもの通りです。

# service htcacheclean start

教師のいない学習の道は長いですね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください