Mac でバーチャルホストを XAMPP や MAMP に頼らず設定する方法

Mac はデフォルトで PHP や Perl が入っているのでいきなり動きます。以下を参考にすれば一瞬で PHP や CGI などを動かすことができます。
超簡単 Mac OS XのローカルでCGI (SSIもPHPも)

ただ、バーチャルホストとなるとやっぱり大変でした。今まで Windows で XAMPP に頼って制作をしていた私には、はじめてのことばかりで6時間くらいかかりました。どこのサイトも、ここにこの名前のファイルがあるよ!って言ってるんですがなかなか見つからなくて…。

XAMPP や MAMP を使わず、一番最初から公開するところまでの設定方法を一通り、私のためにメモを残しておきます。Mac 関係の記事を書くのはまだ怖いので怒られないかビクビクしながらメモしますね。

httpd.conf を設定する

XAMPP の時も触った、httpd.conf です。これを弄っていきます。ちなみに場所は /private/etc/apache2/ にあると思いますが、もしかするとデフォルトではなかったかな…。もしなければ /private/etc/apache2/original/ に httpd.conf というファイルがあるので、それをコピーして使いましょう。

1
$ sudo cp /private/etc/apache2/original/httpd.conf /private/etc/apache2/httpd.conf

httpd.conf を開きましょう。ちょいと vi を使って編集しますが、もし vi を扱えない場合はどこか適当な場所にコピーして編集してから、ここに上書きするという方法で対応することができます。その方法でやっても全然構いません。

1
sudo vi httpd.conf

結構下のほうに以下のような記述があると思います。検索してみてください。

#Include /private/etc/apache2/extra/httpd-vhosts.conf

このファイルのコメントを消します。

Include /private/etc/apache2/extra/httpd-vhosts.conf

この httpd-vhosts.conf というファイルにバーチャルホストの設定を書いていきます。この名前でアクセスされたらこのディレクトリに振り分けるよーっていう記述ですね。別にこのファイルじゃなくても、httpd.conf に書いてもきっと良いと思うんですが、分かりやすいのでここに書いていきましょう。それが一般的でもあります。

ちなみに凄い余談になりますが、もっと凄まじい開発者の方はバーチャルホストの設定が多くなりすぎて分かりにくいので、その設定ごとにファイルを作成しているそうです。

httpd.conf の下の方に行くと以下の行があります。

Include /private/etc/apache2/other/*.conf

これは /private/etc/apache2/other 以下の hoge.conf とか fuga.conf とか xxxx.conf とかのファイルを何でも読み込むよーって事です。なので、もしあなたがバーチャルホストの設定をたくさん書くよ!って場合は以下のように。

Include /private/etc/apache2/vhosts/*.conf

として、/private/etc/apache2/vhosts 以下のファイルをすべて読み込むように設定して、example.com.conf なんていうファイルを作って、その都度設定ファイルを作っていったら管理が楽かもしれないですね。

httpd-vhosts.conf を設定する

それでは、さっそくさっき読み込むように設定した /private/etc/apache2/extra/httpd-vhosts.conf を開きましょう。開き方は自由に、ここでは vi を使って編集していきましょう。

1
$ sudo vi httpd-vhosts.conf

中にいろいろ書いてありますが、これサンプルなのですべて消しましょう。
ちなみに、/private/etc/apache2/original/extra/httpd-vhosts.conf に全く同じファイルがありますので、もし元に戻したくなったらそこからコピーしてくれば大丈夫なので安心してください。

それではさっそくバーチャルホストの設定を書いていきたいところですが、人によって書くことは変わってきますね。今回私はおそらく一般的な /Library/WebServer/Documents/ 以下で全ての制作をしていくことにしております。ご自分の環境に合わせてこのパスは書き換えると良いですね。

今回は以下のような設定をします。

http://localhost/ にアクセスしたら /Library/WebServer/Documents/
http://example.com/ にアクセスしたら /Library/WebServer/Documents/example.com

そうすると httpd-vhosts.conf には以下のように記述をします。

# localhost
<VirtualHost *:80>
    DocumentRoot "/Library/WebServer/Documents"
    ServerName localhost
<Directory "/Library/WebServer/Documents">
order deny,allow
allow from All
</Directory>
</VirtualHost>

# example.com
<VirtualHost *:80>
    DocumentRoot "/Library/WebServer/Documents/example.com"
    ServerName example.com
<Directory "/Library/WebServer/Documents/example.com">
order deny,allow
allow from All
</Directory>
</VirtualHost>

もしかしたら Apache の設定でフォルダへのアクセスが拒否になっているかもしれませんので、allow from All でアクセスを許可しています。

@nanasess 様より指摘していただきました。
DocumentRoot は最後のスラッシュ無しで 指定する必要があるみたいです。
core – Apache HTTP サーバ

以下の記事を参考にしました。
Webサイトのローカルテスト環境構築 on Mac OS X (groundwalker.com)
名前ベースのバーチャルホスト

hosts を書き換えます

そして最後に Windows でもきっとやっていたハズの hosts を編集します。

1
$ sudo vi /private/etc/hosts

多分既に localhost の設定が書いてあるかと思います。これの真似をして以下の記述をファイル一番下部に書き込んでしまいましょう。

127.0.0.1 example.com

こうすると、example.com にアクセスすると IP アドレス 127.0.0.1 にアクセス、つまり自分にという設定になりますね!そして、自分に example.com という名前でアクセスがこれば先程の設定で名前解決が行われます。

ちなみに hosts ファイルの場所を間接的に特定するのに以下のページが役に立ちました。
Mac OS X のXAMPP設定方法 – PHP初心者勉強会

Apache を再起動する

こんなこともあろうかと、先程Mac で Apache を再起動する方法を書いておきました。再起動しましょう。

今回の Apache 再起動は主に hosts 以外のファイルの書き換えを反映させるためです。httpd.conf とかバーチャルホストの設定はこれで反映されます。

403 Forbidden になってしまう

/Library/WebServer/Documents/example.com 以下に index.html ファイルをおいてアクセスしてもなぜか以下のような記述が出てきてファイルが表示できないかもしれません。

Forbidden

You don’t have permission to access /index.html on this server.

そんな時は共有とアクセス権を確認します。ファイルの上で右クリックして情報を表示すると、下の方に共有とアクセス権について書かれていますよー。ここで everyone がアクセス不可になっている場合はこれが犯人です!これを読み/書きにしてみてから、もう一度ブラウザを更新すると見れるようになるはずです。

このアクセス権について気づくのに以下の記事が参考になりました。
Mac OSX でのPHP開発について XAMPP MAXP AptanaStudio AptanaRadils NetBeans KomodoEdit

終わりに

ちなみに途中でいろんなファイルを探すのに find を凄い使うことになりました。その際に以下の記事をちょっぴり参考になったので紹介しておきます。実際私はそこまでカッコよく使いませんでした。

“Trumps by the roadside” – ちょっとだけカッコよく find(1) を使う

コメント

コメントは受け付けていません。