2008年6月27日金曜日

apacheにexpiresモジュール追加

HTTPのレスポンスにexpire date(有効期限)が設定されて無いよ~、と報告受けたので、無い場合はapacheで勝手に発行してもらいたい。

という事で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
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
確認OK、追加されてました。

ちなみにexpiresは何もサーバ側いじくる必要なくて、htmlやcgiなんかでも対応できるようです。
今回は面倒なのでデフォルトを設定してみました。

モジュールさえ実装されていればhtaccessでも可能でしょう。

0 件のコメント: