破棄されたブログ

このブログは破棄されました。

Apache の VirtualHost とドメイン設定

別ポートでテスト運用をしようと思ったんだけど、Chrome for Android を含む Android のブラウザで 80 番ポート以外にアクセスできない事案が発生。*1
Android から確認できないと困るんで、Apache の VirtualHost で DocumentRoot をテスト側に向けて立ち上げようとしたら、今度は名前解決ができない

$ curl test.hogehoge.com
curl: (6) Couldn't resolve host 'test.hogehoge.com'

HTTP リクエストを投げる前の名前解決でコケてるんで、DNS 浸透またんといかんのかなあダルいなあとか思いつつググってみるものの、VirtualHost で DNS 浸透を待ったみたいな話は出てこない。
で、ドメイン管理を お名前.com でやってるんで、この辺りちょっと調べてみたら、どうも明示的に *.ドメイン名 で設定してやらないといけないらしい。*2
そうなると、 お名前.com の設定と DNS 浸透待ちをしないといけなくなるんで、VirtualHost の設定ができているかだけ確認。

前ベースのバーチャルホストでは、 クライアントが HTTP ヘッダの一部としてホスト名を告げる、 ということに依存します。

http://httpd.apache.org/docs/current/ja/vhosts/name-based.html

この通り VirtualHost は HTTP ヘッダの Host を読んで振り分けてるわけだから、curl で HTTP ヘッダの Host だけ書き換えてリクエストを投げてみると

$ curl -v --header 'Host: test.hogehoge.com' hogehoge.com
* About to connect() to hogehoge.com port 80 (#0)
* Trying ***.***.***.***... connected
* Connected to hogehoge.com (***.***.***.***) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl
> Accept: */*
> Host: test.hogehoge.com
>
< HTTP/1.1 200 OK
< Server: Apache

ちゃんと上手く動いてた。
あとは、DNS の設定だけしときゃいいな。

インフラ系は専門外なんで、じゃあお前の専門はなんだよって聞かれると困るけど、名前解決の流れって知らない。今回みたいな場合、hogehoge.com が DNS に設定されていたら、 *.hogehoge.com へのアクセスも自動的に hogehoge.com に向けられてくれるものだと思ってた。

*1:http://androidforums.com/android-lounge/323253-opening-webpage-served-non-standard-port.html

*2:http://www.chusuke.com/2012/08/onamae-virtual_host/

広告を非表示にする