バーチャルホストを使ってサーバーを運用しています。

http.conf に以下のような記述があります。

<VirtualHost *:80>
ServerName www.hoge1.jp
  (省略)
</VirtualHost>

<VirtualHost *:80>
ServerName www.hoge2.jp
  (省略)
</VirtualHost>

IPアドレスを直接指定した場合に、www.hoge2.jp を参照するようにしたいのですが、
その際には、どのように設定をすればよいでしょうか?

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/01/14 17:32:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:y-kawaz No.1

回答回数1422ベストアンサー獲得回数226

ポイント60pt

Apache httpd で名前ベースのバーチャルホストを使う場合、ServerNameにマッチしないアクセスは全て最初のVirtualHostへのアクセスとして処理されます。

なので VirtualHost の順番を入れ替えて www.hoge2.jp のを最初に書けば良い筈です。

<VirtualHost *:80>
ServerName www.hoge2.jp
  (省略)
</VirtualHost>

<VirtualHost *:80>
ServerName www.hoge1.jp
  (省略)
</VirtualHost>

もしくは以下のようなダミーのVirtualHostを最初に書いておいてホスト名付きで再アクセスさせるのでも良いと思います。

#IPでアクセスされた場合のダミー設定
<VirtualHost *:80>      
    Redirect / http://www.hoge2.jp/
</VirtualHost>

<VirtualHost *:80>
ServerName www.hoge1.jp
  (省略)
</VirtualHost>

<VirtualHost *:80>
ServerName www.hoge2.jp
  (省略)
</VirtualHost>
id:chosayou

なるほど、ありがとうございます。

2010/01/13 15:02:06
  • id:b-wind
    参考
    http://httpd.apache.org/docs/2.0/vhosts/name-based.html
  • id:chosayou
    コメントありがとうございます。
    つまり、以下のように、【IPアドレス】のところに直にアドレスををかけばよいという事でしょうか?

    <VirtualHost 【IPアドレス】:80>
    Redirect / http://www.hoge2.jp/
    </VirtualHost>
  • id:y-kawaz
    NameVirtualHost *:80 としてある場合は【IPアドレス】のところも * にしておいてください。
    IPベースのVirtualHostかそれとの併用でも無い限りはIPを指定する必要はありません。
    回答にある通り以下のようなVirtualHostを最初に書けば大丈夫です。
    <VirtualHost *:80>
    Redirect / http://www.hoge2.jp/
    </VirtualHost>
  • id:chosayou
    y-kawazさんコメントありがとうございます。実は、httpd.conf では、Include 文があって、そちらの方で、<VirtualHost > の指定が書かれています。しかも、Include されるファイルでは、いろいろモジュールの読み込みがあって、そちらの方を先に実行しないといけないという事情もあります。
    もちろん、それらを考慮して書けばよいのですが、順番に関係なく、以下のような形式でかけるのならば、その方が楽でよいかと思ったのです。

    <VirtualHost 【IPアドレス】:80>
    Redirect / http://www.hoge2.jp/
    </VirtualHost>

  • id:y-kawaz
    試してないですが、多分 NameVirtualHost *:80 となっている場合、<VirtualHost 【IPアドレス】:80> は無視されるんじゃないかと思います。
    その指定方法はそもそもIPベースのバーチャルホスト、もしくはIPベースと名前ベースの混合の場合の為の書式なので、今回のケースでは忘れた方が良いと思います。
    VirtualHostの設定をIncludeしている場合でもそのIncludeの手前でダミーのVirtualHostを別に書いておけば良いto思います。


    あと、回答時には書き漏れてましたが別の方法として、IPをServerAliasとして記述しておくという方法もあるかと思います。
    この場合サーバが持っているIP全てをServerAliasで列挙しておけば一般的なブラウザにおいては、ダミーのVirtualHostを設定しなくてもwww.hoge2.jpでアクセスを受けることができると思います。
    <VirtualHost *:80>
    ServerName www.hoge2.jp
    ServerAlias aaa.bbb.ccc.ddd
    (省略)
    </VirtualHost>
  • id:chosayou
    返事が遅れて申し訳ありません。コメントありがとうございます。
    IPベースの書き方だったのですね。よく分かりましたありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません