普段、MacのApacheを使ったローカル環境でWebサイトやWebアプリケーションの動作確認をすることがよくある。
ほとんどの場合は、http://localhost/ 以下にプロジェクト毎にサブディレクトリを作ってそこで確認すればOK。
ところが、CakePHPのように「/」(ルート)のアドレスがどうしても必要なアプリケーションを動かしたり、HTML内に絶対パスでリンクやCSS等が指定されているサイトを確認する場合には、サブディレクトリではうまく動作確認できない。
そこで、Mac内だけでアクセスできるローカル用のサブドメインをApacheに設定をする。
たとえば、http://application.local というアドレスでアクセスする場合は、Apacheの方に対応するバーチャルホストの設定をしたあと、/etc/hostsファイルに次のようなエントリーを追加しておけばよい。
127.0.0.1 application.local
ところが、LionからだったかMountain Lionからだったかは覚えてないのだけれど、ブラウザでアクセスするときにワンテンポ以上反応が遅くなってしまった。
一度アクセスできるとしばらくはすぐにアクセスできるんだけど、しばらくすると、またアクセスするのに数テンポかかるようになるという症状だ。
最初はアプリの書道の時にFacebookのAPIを使ってるからアクセスするのに時間がかかっているのかと思っていたけど、他のアプリでも同じ現象が起こったのでAPIが原因ではないということになった。
ちなみに
hostsファイルの編集には管理者権限が必要なのでsudoコマンドを使用する。
sudo vi /etc/hosts
Apacheの設定ファイル(/etc/apache2/extra/httpd-vhosts.conf)には次のようなVirtualHostを追加しておく。
<VirtualHost *:80> DocumentRoot "/Users/user/application.local/htdocs" ServerName application.local </VirtualHost>
Apacheでバーチャルホストの設定をするには他にも設定が必要だけど今回は説明しない。
名前解決が原因?
どうも、名前解決が原因っぽいなとは踏んでいたんだけど、よくよく/etc/hostsを見直してみると、デフォルトで記述されているlocalhostのエントリーが次のように書かれていることに気づいた。
/etc/hosts
127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost fe80::1%lo0 localhost
う〜ん、なんか見慣れないエントリーが増えているような。。。
もしかしてIPv6?
すんなり解決
試しに、application.localへ”::1″を追加してみると、すんなり症状が解決した。
サクサクアクセスできる。
“fe80::1%lo0″というエントリーはいまいちよく分からなかったけど、とりあえずこの2行を使っていればとりあえず大丈夫そうだ。
/etc/hosts
127.0.0.1 application.local ::1 application.local
::1はIPv6で 0:0:0:0:0:0:0:1のことでIPv4の127.0.0.1と同じようにループバックアドレスとなっている。
0:0:0:0:0:0:0:1
ループバックアドレスとして定義されている。0 を省略して 0::1 や ::1 とも表記される。IPv4では 127.0.0.0/8 の範囲の任意のアドレスをループバックアドレスとして使用できるが、IPv6 ではこのアドレスに限られる。ループバックアドレスであるため、このアドレスをインターフェイスに割り当てることはできない。
内部的にIPv6が使用されているってことかな。
そろそろ、IPv6の知識も実際に必要になってきたということか。
関連記事
- None Found