という事でmod_expiresを実装する事にした。
まず、DSOが有効になってればapacheをコンパイルし直す必要が無いのでラッチー。
調べてみる。
# /usr/local/apache/bin/httpd -l
Compiled in modules:
core.c
mod_authn_file.c
mod_authn_default.c
:
:
:
mod_userdir.c
mod_alias.c
mod_so.c
mod_so.cがあるので、DSO有効みたい。ヤッタネ
早速実装に入ります。
/usr/local/apache/bin/apxs -ic mod_expires.c
でまずは、エラー。怒られました。
# ./apxs -ic mod_expires.c
gcc -DLINUX=22 -I/usr/include/db1 -DUSE_HSREGEX -DUSE_EXPAT -I../lib/expat-lite
-fpic -DSHARED_MODULE -I/usr/local/apache/include -c mod_expires.c
gcc: mod_expires.c: No such file or directory
gcc: no input files
apxs:Break: Command failed with rc=1
これはmod_expires.cの場所が探せてないって事らしいです。
指定方法は調べるとみんないろんな方法でやってて、うまくいかず。
とりあえず、
/usr/local/apache/bin/apxs -ic /usr/local/src/apache_x.xx.xx/src/modules/standard/mod_expires.c
でうまくいった。
その後、httpd.confにLoadModuleで上で作られたmod_expires.soを追加。
と、Expiresの設定を追加。
LoadModule expires_module libexec/mod_expires.so
ExpiresActive On
ExpiresDefault "access plus 300 seconds"
※"access plus 300 seconds"の部分はデフォルトで設定される有効期限を記述。この場合アクセスから5分
後はapache再起動してOK。
ターミナルソフトか、コマンドプロンプトで80番ポートにアクセスしてGETしてみる。
C:\>telnet www.hoge.jp 80確認OK、追加されてました。
GET / HTTP/1.0
HTTP/1.1 200 OK
Date: Fri, 27 Jun 2008 09:22:48 GMT
Server: Apache/1.3.17 (Unix) PHP/4.3.5
Cache-Control: max-age=60
Expires: Fri, 27 Jun 2008 09:27:48 GMT
Connection: close
Content-Type: text/html
ちなみにexpiresは何もサーバ側いじくる必要なくて、htmlやcgiなんかでも対応できるようです。
今回は面倒なのでデフォルトを設定してみました。
モジュールさえ実装されていればhtaccessでも可能でしょう。