@kyanny's blog

My thoughts, my life. Views/opinions are my own.

バーチャルホストで悩む

毎度毎度、バーチャルホストの設定で迷います。サブドメインを設定してバーチャルホストで別の役割をさせたいときなど、 DNS の設定レベルで足りてないのか、 NameVirtualHost や VirtualHost の書き方が間違っているのか、 /etc/hosts に書いたときと書かないときでどう違うのか、などややこしくて泣きたくなってきます。

foo.bar.examle.com という DNS が割り振ってあるサーバ上の apache で、 hoge.foo.bar.example.com というバーチャルホストを設定したい(GET http://hoge.foo.bar.example.com/ のようにリクエストを送ったら受け付けてほしい)のですが、

NameVirtualHost *:80
<VirtualHost hoge.foo.bar.example.com:80>
DocumentRoot htdocs
LogLevel info
ErrorLog logs/hoge_error_log
</VirtualHost>

とかいてしまうと GET / は 200 OK が返るけれども GET /foo (そういうパスは存在する) とリクエストを投げると 500 Server closed connection without sending any data back というエラーメッセージが返り、 error_log を見ても何もかいてありません。バーチャルホストの設定をすべてコメントアウトすればリクエストは意図したとおりに処理されるのですが、バーチャルホストを切ってないのでログがデフォルトの access_log, error_log に出力されてしまいます。

VirtualHost が他にあるわけではないので(つまりデフォルトのサーバが hoge.foo.bar.example.com) そもそもバーチャルホストなんて難しいことをせずに httpd.conf の各種ディレクティブを直接書き換えてしまえればいいのですが、そういうわけにもいかず・・・。

混乱してしまったときは考えを書き出すことで頭の中を整理できることがありますが、今回はあまり整理できませんでした。 DNS とかプロトコルとかナントカカントカ、いろいろ底が浅いのでボロが出てしまうと止まらないのが悲しいです。