Yosemite にしたら Apache 2.4 になっていた

2014年11月20日 21:15

Mac OS X は基本的に UNIX(BSD UNIX)ベースであり、HTTP サーバの Apache もあらかじめインストールされている。10.6(Snow Leopard)まではシステム環境設定から「ウェブ共有」をオンにするだけで Apache を起動(有効化?)できたが、10.7(Lion)以降はユーザが明示的に起動させる必要がある。とはいえ、起動だけならコンソールにて以下のコマンドを実行するだけ(あ、いや、Admin パスワードとかは必要だが)でいい。

$ sudo apachectl start

Apache が起動すれば http://localhost/ なり http://127.0.0.1/ なりの URL で自分自身(?)にアクセスでき、「It works!」というおなじみの一文(そういえば以前は「あなたの予想に反して、このページが見えているでしょうか?」だったような……)が表示される。この場合のドキュメントルートは /Library/WebServer/Documents/ になるが、Mac OS X は基本的に一般ユーザーでログインしているので、ここはやはりユーザディレクトリにコンテンツを置き、http://localhost/~somin/ のような URL でアクセスできたほうが何かと都合がいいはずだ。が、Mac OS X の httpd.conf はユーザディレクトリに関する指定部分がコメントアウトされているので、これを有効化する必要がある。

ちなみに筆者の Mac OS X は長いこといじっているうちに何がデフォルトか分からなくなっているため、有効化云々の話は引用した各ツイートから適宜ピックアップし、ご自身の環境との差異も考慮しつつ参考にしていただきたい(無責任ですみません)。

というわけで、話は一気に飛んで Yosemite である。じつは Yosemite こと Mac OS X 10.10 は、それまでの Mavericks(Mac OS X 10.9)の Apache 2.2 系(当方の環境では 2.4.9)とは異なり、Apache 2.4 系がインストールされている。

$ httpd -v
Server version: Apache/2.4.9 (Unix)
Server built:   Sep  9 2014 14:48:20

よって、Mavericks から Yosemite にアップグレードした人は、この Apache 2.2 → 2.4 に起因する不具合に遭遇する可能性が少なからずある。中でもドラスティックに変わったのが、アクセス制御に関する部分だ。

たとえば特定のディレクトリに外部からアクセスできない(127.0.0.1 からのみ許可)ようにしたい場合、以前はこんな感じで書いていたと思う。

<Location /test>
    Order deny, allow
    Deny from all
    Allow from 127.0.0.1
</Location>

というかこれ、直感的に分かりにくいと思う。筆者も今まで何度も書いているが、何かアンチョコがないとソラじゃ到底書けない。Order deny, allow の部分を Order allow, deny と誤記しただけで、どこからも一切アクセスできない状態になるのもいただけない(セキュリティが甘くなるよりはマシかもしれないが)。

が、Apache 2.4 系の場合、上記と同じ挙動を実現するにはこう書く。

<Location /test>
    Require ip 127.0.0.1
</Location>

これは非常にシンプルで分かりやすい。しかももっとシンプルな書き方もある。

<Location /test>
    Require local
</Location>

こっちのほうがインターフェースがどの IP アドレスを名乗っているかとかを気にしなくていいぶん、より確実かもしれませんね。