仕事でサーバの移転をしていて、Apache2.0系のmod_auth_mysqlが入ったサーバーから、Apache2.2系にセットアップし直したときに、ApacheのAPIの違いから上手く入らずちょっとハマッタのでメモしておきます。

そもそもAPIの違いでApache2.0系からApache2.2系への移行が上手くいかないんですけど、既に同じ問題に直面したことが有る方がいらっしゃって、Apache2 - MySQL認証 / うにっくすさんの覚え書きに手順がありました。

ながれとしては、mod_auth_mysqlを公式サイトからダウンロード、上のサイトで紹介されているpatchをあてて、インストールとなります。

公式サイト
  http://sourceforge.net/projects/modauthmysql/

ダウンロードリンク
  http://sourceforge.net/projects/modauthmysql/files/modauthmysql/3.0.0/mod_auth_mysql-3.0.0.tar.gz/download 

ダウンロードしたファイルとpatchを同フォルダにおいて
$ tar zxvf mod_auth_mysql-3.0.0.tar.gz
$ cd mod_auth_mysql-3.0.0
$ patch -p0 < ../mod_auth_mysql.c.patch
$ sudo /usr/local/apache2/bin/apxs -cia -I/usr/local/mysql/include/mysql/ -L/usr/local/mysql/lib64/mysql/ -lmysqlclient -lz -lm mod_auth_mysql.c; 
でインストールとLoadModuleまで完了です。ただ、このまま起動すると下記のエラーになります。
[error] Internal error: pcfg_openfile() called with NULL filename [error] [client 192.168.0.1] (9)Bad file number: Could not open password file: (null)
これはmod_auth_basic.soより後に記述するとそうなるようで、先にmod_auth_basicが動作してエラーになってしまうようです。mod_auth_basicより先にロードすればいいと記述をみかけたんですが、mod_auth_basicとかメジャーな物は、動的じゃなくて静的にくみこまれている場合も多く、自分の環境がそうだったのですが、ここで詰まってしまいました。

色々さがしていたら海外のMLで解決法をみつけました。

AuthType Basic
AuthUserFile /dev/null
AuthBasicAuthoritative Off

AuthMySQLEnable On
Require valid-user
AuthMySQLHost localhost
AuthMySQLDB test
AuthMySQLUser www
AuthMySQLPassword pass
AuthMySQLUserTable user
AuthMySQLNameField key
AuthMySQLPasswordField secretkey

いったんAuthUserFileを/dev/nullにして、AuthBasicAuthoritativeをOffにします。こうすると、認証ファイルに該当ユーザーが無い場合、下位の認証プロセスに認証を委譲するようにどうさするみたいです。mod_auth_basicのページにも書いてありました。なるほどですねー。勉強になりました。