連載第156回
2019年9月15日
MAMP , Gas Mask , hosts , 複数ドメイン , 名前解決 , LAN内の他PCからのアクセスとその制限

MAMPで複数管理しているローカルサイトのURLを分かり易くしたい

 以前、ローカル作業用サイトを複数持ちたいという案件で、MAMPを用いて若干手を加えてそれを実現させる方法を試しました。ネットで紹介されていた記事を参考にして、任意のポート番号(ここでは8001〜8002)をapacheのコンフィグファイルに追加し、ヴァーチャルホストをONにすることで「localhost:8001〜8002」というURLをブラウザに入力してアクセスすることが可能になりました。

 が、最近。その「localhost:8001」というネーミングが抽象的過ぎて分かり難い&入力が面倒臭いと感じるようになってきたのです。これを普通のドメイン名のように「AAA.zzz」というような、複数管理していても分かり易いようなシンプルな名前で扱いたい。今回はそれを実現するまでのアレコレをレポートします。かなり試行錯誤しました(のべ8時間くらい)。

サクサクっと答えを書く前に、失敗談を聞いてくれ

 まずはいつも通り、有志がネットに公開してくれている参考記事を片っ端から調べてみました。だいたい目星を付けて検索キーワードで絞り込んで、おそらく20くらいの記事に目を通したと思います。

 基本的には次のような行程で実現できそうだな…と脳内設定。

■ApacheでバーチャルホストをONにする(過去に経験済み)
■Apacheで使用するポート番号を指定する(過去に経験済み)
■Macの「hosts」ファイルを開いて、使用するMacのIPアドレスとドメイン名を紐付ける(New!)
■Apacheのヴァーチャルホスト機能でMacのIPアドレス&ポート番号を、上記hostsファイルで設定したドメイン名と紐付ける(New!)
■そのドメイン名が参照するファイルを置いているディレクトリを指定する(過去に経験済み)

 概念や作業行程に一番参考になったのは『バーチャルホストによる複数サイトの同時運用』『バーチャルホストの例』の中にある「違うポートで違うサイトを運営する」の項目だったのだけれど、いざ実際に作業を開始するとどういうわけか全くうまく行かない…。 サイトを読み込みには行くけど、全然完遂しないので「OS X で DNS キャッシュをリセットする」を読んで試してみたけれどダメ。時間だけがどんどん過ぎていきました。

 結論を先に書くと、以前の成功体験が仇となって「Apacheで使用するポート番号をカスタマイズして指定する」事を前提としていたのがいけなかったのです。過去の自分の例で言うと「8001〜8002(さらに追加するなら8003〜とか)」とListenでポート番号を追記し、それをMacに割り当てられているIPアドレス併せて「192.168.xx.yy:8001」というようにしなければいけないと思い込んでいたのです。が、それを実行してみて埒が明かず、もう打つ手が無いなあ〜と諦めかけていたところで、素直にデフォルトの「*:80」を使ってみたら突然光が射し込んで道が開けました。複数のローカルサイトは一旦コメントアウトして、1つのローカルサイトを単純に「*:80」と記述して紐付けたとき、ブラウザから何事もなかったようにアクセス出来るようになりました。では、下記からは無事動作している現状の答えだけをシンプルに列挙してみます(素人設定なので間違いもあるかと思いますが、指摘していただければ幸いです)。

『Gas Mask』を使って、hostsファイルをカスタマイズ

 hostsファイルをいじって、ローカルのIPアドレスを任意のドメイン名と紐付けます。hostsファイルの編集方法については普通にエディタを使ったりするなどいろいろあるのですが、今回は「Gas Mask」というユーティリティを使ってみることにしました。

 まずコチラのサイト(https://github.com/2ndalpha/gasmask)から「Gas Mask」をダウンロードして起動すると上図のようにデフォルトのhostsファイルが開きます。そこで、ウィンドウの左上にある「+」ボタンを押して「Local」を選び、オリジナルファイルとは別途に新規「Hosts File」を複製します。

 そこへ今回、ローカルで管理したいサイトのドメイン名を記入していきます。ここでのポイントは使用しているMacのIPアドレスをシステム環境設定で調べて、それを追記し、その横に使用するドメイン名を半角スペースで区切りながら列挙していきます。上図では参考例として「111.aaa」「222.bbb」「333.ccc」としていますが、任意の文字列で大丈夫(例えばflipflipflip.local みたいな感じとか)。記入を終えたらSaveボタンを押し、続けてActiveボタンを押してMacが参照するhostsファイルを切り替えます。
 ちなみに自分が試行錯誤していた時は、hostsファイルのIPアドレス横に「192.168.1.3:8001」という感じでポート番号を追加したりしていたのですが、hostsファイルはポート番号を完全に無視するというか、記述すると動かないようです。

Apacheのhttpd.confファイルでポート番号を修正する

 これが今回、盛大に嵌まってしまった罠、ポート番号。ローカルのマシン(僕の場合はMac)でドメイン名など気にせずに管理するなら、以前試みた設定で全く問題ないのだけれど、ドメイン名を使おうとした途端、なにやら挙動がおかしくなってしまいました。
 数多くの組み合わせを試した結果、「なんとなく、これなら大丈夫そう…」と落ち着いたApacheのhttpd.confファイル設定が下図となります。ちなみに場所は「MAMP/conf/apache/httpd.conf」

 行番号49〜51は、これまで設定していたポート番号(8888、8001、8002)。52行目の8003でいろいろ実験してダメで、もう断念しかけたところで初心に戻り、デフォルトのポート番号「80」を48行目に追記してみました。これが上手く行った。今回のケースで、どうして「80番」しか受け付けないのか分からないのですが(このリファレンスを読むと、任意のポート番号を受け付けてくれそうに受け取れるのだけれど…)、結果オーライです。もしかしたら単純に2桁の数字だったらOK、なのかもしれないが80番以外は現時点で試してません。

Apacheのhttpd-vhosts.confファイルでドメイン名を紐付ける

 続いては「MAMP/conf/apache/extra/httpd-vhosts.conf」ファイルを開き、「Gas Mask」で設定した任意のドメイン名とローカルの作業フォルダを紐付けます。上図では29行〜35行までが従来までの設定。今回はそこに追加する形で改めて19行目に「NameVirtualHost *:80」を追記(20行でコメントアウトしている「#NameVirtualHost 192.168.1.3:8004」はうまく行かなかったものです)。
 さらに37行目〜50行目までがテスト用ドメイン名とローカル作業用のルートディレクトリと紐付ける記述です。ここでは「*:80」の他、新たに「ServerName」で任意のドメイン名を指定しています。※ちなみに実作業データを置く「DocumentRoot」末尾のルートフォルダ名は「ServerName」と合わせる必要はなく、例えば「LocalTEST」でも大丈夫。

簡易セキュリティ対策

一番手っ取り早いのは自宅ローカルネットワークに他のPC等からアクセス出来ないよう、Macの「システム環境設定>セキュリティとプライバシー」でファイアーウォールをONにしてしまうこと。

しかし、これだと作業しているMac Pro以外からのマシン、例えばMacBook Airから作業中のサイトにアクセスしてブラウザで表示させることが出来ません。なので、MAMP内にあるApacheのhttpd.confファイルにあるアクセス制限に関する部分を修正して、条件を満たす特定のマシンからのアクセスは可能にします。

上図、httpd.confファイルの248行〜249行にある記述を…

上図、248行〜252行のように書き換えます。これはMAMPを起動している作業中のマシンのみからのアクセスを可能にします。なので、自宅LAN内の他のマシン、例えばMacBook Airに割り当てられているプライベートIPアドレスが192.168.1.5であれば、253行目に「Allow from 192.168.1.5」と追記し、アクセスしたい時だけ臨時でファイアーウォールを「OFF」にすれば、まあ、大丈夫なハズ。

もし、AirMac extremeのDHCP機能で自動割当されているIPアドレスが不安であれば「システム環境設定>ネットワーク>詳細>TCP/IP」で、個別のマシンそれぞれのIPv4を「DHCPサーバーを使用(アドレスは手入力)」に切り替え、乱数っぽい感じで任意の数値に変更しておけば、若干セキュリティ度がアップする…かもしれません。