LionにプリインストールされてるApacheが動かない時の話

OSXにはデフォルトでapacheがインストールされています。ところが普通にapachectl startとすると起動はするものの、localhostにアクセスするとエラーになります。エラーログ(/var/log/apache2/error_log)を見るとFile does not exist: /usr/htdocsと出ているのですが、/usr/htdocsに見覚えはありません。実際に/etc/apache2/httpd.confをみても下記のように設定されています。

DocumentRoot "/Library/WebServer/Documents"

ちなみにシステム環境設定のWeb共有をONにすると、正常に動くんですが流石にダサいのでそんな操作はやりたくありませんよね。

なんでWeb共有やったら動くねんということで、ひとまずWeb共有をONにして起動オプションを確認してみます。

$ ps aux | grep httpd
_www   ... /usr/sbin/httpd -D FOREGROUND -D WEBSHARING_ON
root   ... /usr/sbin/httpd -D FOREGROUND -D WEBSHARING_ON

見慣れないやつがいます。WEBSHARING_ONって?まさかと思ってhttpd.confをもう一度確認すると、DocumentRootの直前にIfDefineが書かれてありました。Web共有の時しかDocumentRootに値が入りませんやん。なんだこれ。

<IfDefine WEBSHARING_ON>
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/Library/WebServer/Documents"
...

</IfDefine>

httpd.confからWEBSHAREING_ONのIfDefinedディレクティブを消せば、無事apachectlで思った通りの挙動をしめします。2箇所あるので注意しましょう。

ちなみにapacheのドキュメントを見てみると、DocumentRootのデフォルト値は${ServerRoot}/htdocsになるようで、冒頭のエラーログの理由も納得がいきますね。

何のためにAppleがWEBSHAREING_ONなんて無意味なIfDefinedディレクティブを追加したのかわかりませんが、もしも設定画面からの操作を促す為だけに追加していたとしたら酷い話です。

1 thought on “LionにプリインストールされてるApacheが動かない時の話”

Leave a Reply

Your email address will not be published. Required fields are marked *