owncloud というミドルウェアの使い心地を試してみようと、FreeBSD 8.4上にApache 2.4 をインストールしました。owncloud に関しては現時点では未使用のためまた別途記述したいと思っています。
OSのFreeBSD 8.4は クリーンインストール直後のFreeBSD 8.3から freebsd-update コマンドによりアップグレードしたもので、ほぼ真っ白な状態。
余談ですが、FreeBSD 8.3 から 8.4 への freebsd-update コマンドによる更新は7.3→8.3 へのアップグレードと比べて非常に簡単。殆ど /usr/local の下が空っぽで、カスタマイズも行っていなかったたためもありますが、2時間くらいで終了。ブートローダーが変更になっているということでしたが、全く実感できず。本番マシンも 8.3 から 8.4に上げて問題ないのでは?と感じているところです。
運用マシンでは Apache 2.2系を使っていますが、/usr/ports/www の下を覗いてみると、Apache 2.4系があったので、どうせテストということで apache24 をインストールすることにしました。 Apacheのインストールは、「make install」一発で完了。モジュールはデフォルトでOK。
動かしたい owncloud というミドルウェアは php で書かれているようなので、/usr/local/lang/php5 の下でビルドを始める前に、一度 「make config」 して、Apache モジュールにチェックを入れた後で、「make install」を行う必要があります。これを忘れると phpMyAdmin や WordPress など php で書かれているミドルウェアが動きません。
Apache はデフォルトでは /usr/local/www/apache24 の下に、owncloud は /usr/local/www/owncloud の下に Webコンテンツをインストールするので、owncloud を使うためには、Apache のディレクトリ Alias機能を使って、owncloud ディレクトリが /usr/local/www/apache24/data/owncloud として見るように Alias 定義する必要があります。
手動で、httpd.conf の <IfModule alias_module> セクションに、
Alias /owncloud /usr/local/www/owncloud AcceptPathInfo On <Directory /usr/local/www/owncloud> AllowOverride All Order Allow,Deny Allow from all </Directory>
と追加して apache を起動。
まず、Apacheが起動していることを確認するために、「http://freebsd84.lifewithunix.jp/」をアクセスすると、毎度の「It’s work」が表示されます。
続いて、「http://freebsd84.lifewithunix.jp/owncloud/」をアクセスすると、
Forbidden
You don’t have permission to access /owncloud/ on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
となり、アクセスできません。
パーミッションの問題というのは簡単に理解できますが、どこのパーミッション???
/owncloud 下の .htaccess が原因かどうかを切り分けるために、空のディレクトリを別のAlias定義してみたところ、新たのAliasに対しても同様のエラーとなり、owncloud 側の問題ではなく Apache側の問題だと判明。
しかし、httpd.conf の中身を見ても原因がわからず。
やむを得ず、Apache を2.2 にダウングレードして、デフォルトのhttpd.conf に上記の Alias を差し込んで起動したところ、なんと無事にowncloud が起動。
これで、原因が httpd.conf の記述だと判明しました。そして、検索したり httpd.conf を比較したりしたところ、Apache 2.2 と 2.4 で httpd.conf の <Directory /> に関するデフォルト記述が変更になっていることが判明。
2.2の記述
<Directory /> AllowOverride None Order deny,allow Deny from all </Directory>
2.4の記述
<Directory /> AllowOverride none Require all denied </Directory>
このセクションと、Alias ディレクトリのアクセスパーミションが関係しているとは考えませんでした。
このURLに感謝。Apache 2.4 のデフォルト記述では Alias コマンドが動かないということが判明したので、テスト環境ですから、この4行をコメントアウトして対応することにしました。2時間くらい悩んでしまいました。