友人のサーバーにはIPアドレスは1つしか付いていないので、Non-IPベースのバーチャルホスティングという事になるのだが、マニュアルのサンプルを読む限り、非常に簡単そうに見える。
まずDNSにドメインを登録する。これは既に済ませてある。
次に、
NameVirtualHost 111.22.33.44 <VirtualHost 111.22.33.44> DocumentRoot /www/domain ServerName www.domain.tld ... </VirtualHost> <VirtualHost 111.22.33.44> DocumentRoot /www/subdomain ServerName www.sub.domain.tld ... </VirtualHost>
という記述を付け加えれば良い、と書いてあったがこいつが食わせ物である。
まず第一に、日本のApacheページにあるNon-IPベースの方の解説にはなかったNameVirtualHostディレクティブが書かれている。これを入れないとうまく動作しない。また、日本のApacheページには、<VirtualHost>の中にFQDNをそのまま書いていたがこれもうまく行かない。IPアドレス直書きでないとうまく行かなかった。
さらに悪い事に、私はマシンのIPアドレスを間違えていた。外から見えるIPアドレスを書いていたのだが、NATか何かでIPアドレス変換させているらしく、マシンのインターフェイスのIPアドレスは外から見えるものと違っていたのだ。
仕方がないので、内側のIPアドレスを指定したところ、httpdが落ちてしまった。エラーログを見ると、「10.0.0.1が解決できない」旨のメッセージがある。
まさかローカルでしか使用しないアドレスのためにBINDを書き直すのも馬鹿らしいので、/etc/hostsに書き加えてみる。するとうまく起動。
/etc/hosts: 10.0.0.1 kaede.to www.kaede.to
試しにhttp://kaede.toを開いてみる。うまく表示されている。。。と思ったら、友人のサイトまでkaede.toになってしまっていた。これではいけない。何のためのバーチャルホストか分からないではないか。
結局、VirtualHostを2つ書き、一つは友人のサイト、もう一つはkaede.toを向くように設定したところうまくいった。
こんな解決方法でいいのだろうか。。。誰か知っている人がいたら教えてください。
※結局こうしました。10.0.0.1が内側のIPアドレスです。
NameVirtualHost 10.0.0.1 <VirtualHost 10.0.0.1> DocumentRoot /docs/ ServerName www.digital-canvs.com </VirtualHost> <VirtualHost 10.0.0.1> DocumentRoot /docs/kaede/ ServerName www.kaede.to ServerAlias kaede.to *.kaede.to </VirtualHost>