先日、Apache を 1.3 から 2.2 にアップグレードしたので、前から気になっていた mod_xsendfile[10] を試してみました。
その効果は絶大! :thumb_up:
xpWiki[11] では、ページに添付されたファイルをはじめ、アイコン画像、JavaScript、CSS などが、PHP を通して出力されているのですが、これらのうち大きなサイズの添付ファイルがダウンロードされる場合に、PHPがI/O待ちになります。
通常はそんなに問題はないのですが、ボットが襲来した時など処理待ちプロセスが増え続けて、どうにもこうにもならなくなってしまうことが結構頻繁に起こっていました。
そんな時のために、monit で監視して異常な負荷になった場合に Apache を自動で再起動させていたのですが、mod_xsendfile に対応させてみたところ、高負荷になることは今のところ起こらなくなりました。 :ok:
ただ、mod_xsendfile は、"Content-Encording" ヘッダを除去してしまうので、gzip な CSS や JavaScript を出力することができません。
xpWiki[11] では、積極的に gzip での出力を行っているので、mod_xsendfile 0.11 をちょこっといじって、ヘッダに "X-Sendfile-Use-CE: Yes" を出力することで、"Content-Encording" ヘッダの除去を行わないようにしてみました。
apxs -cia mod_xsendfile.c
で普通にインストールできます。
あとは、http.conf や .htaccess[15] などで
<IfModule mod_xsendfile.c> XSendFile on XSendFilePath "/html/hogehoge" XSendFilePath "/trustpath/hogehoge" </IfModule>
などとすればOK。(XSendFilePath は、読み込み可能にするパスをそれぞれ適切に設定する。)
mod_xsendfile 対応版の HypCommonFunc[16] と xpWiki[11] は次のバージョンで。 :shy:
(This host) = https://xoops.hypweb.net