name-based.xml.ja revision 65a611af7093423efb91e5794b8887a527d4cf63
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose<?xml version="1.0" encoding="UTF-8" ?>
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose<!DOCTYPE manualpage SYSTEM "/style/manualpage.dtd">
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose<?xml-stylesheet type="text/xsl" href="/style/manual.ja.xsl"?>
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose<!-- English Revision: 420990:1515421 (outdated) -->
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose<!--
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose Licensed to the Apache Software Foundation (ASF) under one or more
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose contributor license agreements. See the NOTICE file distributed with
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose this work for additional information regarding copyright ownership.
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose The ASF licenses this file to You under the Apache License, Version 2.0
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose (the "License"); you may not use this file except in compliance with
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose the License. You may obtain a copy of the License at
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose http://www.apache.org/licenses/LICENSE-2.0
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose Unless required by applicable law or agreed to in writing, software
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose distributed under the License is distributed on an "AS IS" BASIS,
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose See the License for the specific language governing permissions and
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose limitations under the License.
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose-->
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose<manualpage metafile="name-based.xml.meta">
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose<parentdocument href="./">バーチャルホスト</parentdocument>
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose<title>名前ベースのバーチャルホスト</title>
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose<summary>
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose <p>この文書では名前ベースのバーチャルホストをどんなとき、
87ed72b47859e673b636c85f35b85f1546c7ed3dSimo Sorce どうやって使うかを説明します。</p>
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose</summary>
e87badc0f6fb20a443cf12bde9582ecbc2aef727Sumit Bose
e87badc0f6fb20a443cf12bde9582ecbc2aef727Sumit Bose<seealso><a href="ip-based.html">ネームベースのバーチャルホスト</a></seealso>
e87badc0f6fb20a443cf12bde9582ecbc2aef727Sumit Bose<seealso><a href="details.html">バーチャルホストのマッチングについての詳細</a></seealso>
e87badc0f6fb20a443cf12bde9582ecbc2aef727Sumit Bose<seealso><a href="mass.html">大量のバーチャルホストの動的な設定</a></seealso>
b1829e54acbc8a010aca7f14b9ffa9625f8c102cSumit Bose<seealso><a href="examples.html">バーチャルホストの一般的な設定例</a></seealso>
b1829e54acbc8a010aca7f14b9ffa9625f8c102cSumit Bose<seealso><a href="examples.html#serverpath">ServerPath 設定例</a></seealso>
87ed72b47859e673b636c85f35b85f1546c7ed3dSimo Sorce
87ed72b47859e673b636c85f35b85f1546c7ed3dSimo Sorce<section id="namevip"><title>名前ベースと IP ベースのバーチャルホストの比較</title>
87ed72b47859e673b636c85f35b85f1546c7ed3dSimo Sorce
87ed72b47859e673b636c85f35b85f1546c7ed3dSimo Sorce <p>IP ベースのバーチャルホストでは、応答する
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose バーチャルホストへのコネクションを決定するために IP
f8a4a5f6240156809e1b5ef03816f673281e3fa0Jakub Hrozek アドレスを使用します。ですから、それぞれのホストに個々に IP
f8a4a5f6240156809e1b5ef03816f673281e3fa0Jakub Hrozek アドレスが必要になります。これに対して名前ベースのバーチャルホストでは、
f8a4a5f6240156809e1b5ef03816f673281e3fa0Jakub Hrozek クライアントが HTTP ヘッダの一部としてホスト名を告げる、
f8a4a5f6240156809e1b5ef03816f673281e3fa0Jakub Hrozek ということに依存します。この技術で同一 IP
f8a4a5f6240156809e1b5ef03816f673281e3fa0Jakub Hrozek アドレスを異なる多数のホストで共有しています。</p>
f8a4a5f6240156809e1b5ef03816f673281e3fa0Jakub Hrozek
f8a4a5f6240156809e1b5ef03816f673281e3fa0Jakub Hrozek <p>名前ベースのバーチャルホストは通常単純で、それぞれのホスト名と
f8a4a5f6240156809e1b5ef03816f673281e3fa0Jakub Hrozek それに対応する正確な IP アドレスを DNS で設定し、異なる
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek ホスト名を区別するように Apache HTTP サーバを設定するだけです。
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek さらに、名前ベースのバーチャルホストは不足する IP
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek アドレスの需要を緩和します。したがって、IP ベースのバーチャルホストを
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek 選択すべき特定の理由がなければ名前ベースのバーチャルホストを使うべきです。
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek IP ベースのバーチャルホストを使用することを考慮する理由として、</p>
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek <ul>
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek <li>名前ベースのバーチャルホストに対応していない古いクライアントがある
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek 名前ベースのバーチャルホストが働くためには、クライアントは
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek HTTP ホストヘッダを送ってこなければなりません。
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek これは HTTP/1.1 の仕様で要求されていて、すべての現代的な
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek HTTP/1.0 ブラウザでも拡張として実装されています。
caee9828ee30609e9f433957dbb3d0163390a207Sumit Bose とても古いクライアントをサポートしつつ、名前ベースの
caee9828ee30609e9f433957dbb3d0163390a207Sumit Bose バーチャルホストを行いたい場合は、この文書の最後の方に
caee9828ee30609e9f433957dbb3d0163390a207Sumit Bose 書かれている解決策になるかもしれない方法を見てください。</li>
caee9828ee30609e9f433957dbb3d0163390a207Sumit Bose
f8a4a5f6240156809e1b5ef03816f673281e3fa0Jakub Hrozek <li>名前ベースのバーチャルホストは SSL プロトコルの特徴により、
f8a4a5f6240156809e1b5ef03816f673281e3fa0Jakub Hrozek SSL セキュアサーバには使えません。</li>
f8a4a5f6240156809e1b5ef03816f673281e3fa0Jakub Hrozek
f8a4a5f6240156809e1b5ef03816f673281e3fa0Jakub Hrozek <li>オペレーティングシステムやネットワーク装置のなかには、
f8a4a5f6240156809e1b5ef03816f673281e3fa0Jakub Hrozek 別の IP アドレス上でない場合、複数のホストを別扱いできないような
caee9828ee30609e9f433957dbb3d0163390a207Sumit Bose 帯域管理の方法を実装しているものがあります。</li>
f8a4a5f6240156809e1b5ef03816f673281e3fa0Jakub Hrozek </ul>
f8a4a5f6240156809e1b5ef03816f673281e3fa0Jakub Hrozek
f8a4a5f6240156809e1b5ef03816f673281e3fa0Jakub Hrozek</section>
f8a4a5f6240156809e1b5ef03816f673281e3fa0Jakub Hrozek
f8a4a5f6240156809e1b5ef03816f673281e3fa0Jakub Hrozek<section id="using"><title>名前ベースのバーチャルホストを利用する</title>
2962b3d1e072ff2ebbe343095812dad697d6bf1dSumit Bose
2962b3d1e072ff2ebbe343095812dad697d6bf1dSumit Bose<related>
2962b3d1e072ff2ebbe343095812dad697d6bf1dSumit Bose <modulelist>
2962b3d1e072ff2ebbe343095812dad697d6bf1dSumit Bose <module>core</module>
2962b3d1e072ff2ebbe343095812dad697d6bf1dSumit Bose </modulelist>
2962b3d1e072ff2ebbe343095812dad697d6bf1dSumit Bose
2962b3d1e072ff2ebbe343095812dad697d6bf1dSumit Bose <directivelist>
2962b3d1e072ff2ebbe343095812dad697d6bf1dSumit Bose <directive module="core">DocumentRoot</directive>
2962b3d1e072ff2ebbe343095812dad697d6bf1dSumit Bose <directive module="core">NameVirtualHost</directive>
2962b3d1e072ff2ebbe343095812dad697d6bf1dSumit Bose <directive module="core">ServerAlias</directive>
2962b3d1e072ff2ebbe343095812dad697d6bf1dSumit Bose <directive module="core">ServerName</directive>
2962b3d1e072ff2ebbe343095812dad697d6bf1dSumit Bose <directive module="core">ServerPath</directive>
2962b3d1e072ff2ebbe343095812dad697d6bf1dSumit Bose <directive module="core">VirtualHost</directive>
2962b3d1e072ff2ebbe343095812dad697d6bf1dSumit Bose <directive module="core" type="section">VirtualHost</directive>
caee9828ee30609e9f433957dbb3d0163390a207Sumit Bose </directivelist>
caee9828ee30609e9f433957dbb3d0163390a207Sumit Bose</related>
caee9828ee30609e9f433957dbb3d0163390a207Sumit Bose
caee9828ee30609e9f433957dbb3d0163390a207Sumit Bose <p>名前ベースのバーチャルホストを使うには、そのホストへの
caee9828ee30609e9f433957dbb3d0163390a207Sumit Bose リクエストを受け付けるサーバの IP アドレス (もしかしたらポートも)
caee9828ee30609e9f433957dbb3d0163390a207Sumit Bose を指定する必要があります。
caee9828ee30609e9f433957dbb3d0163390a207Sumit Bose これは <directive module="core">NameVirtualHost</directive>
caee9828ee30609e9f433957dbb3d0163390a207Sumit Bose ディレクティブで設定します。通常、<directive
caee9828ee30609e9f433957dbb3d0163390a207Sumit Bose module="core">NameVirtualHost</directive> で
caee9828ee30609e9f433957dbb3d0163390a207Sumit Bose <code>*</code> の属性を使ってサーバの全ての IP アドレスを使います。
81165faf5d951aca69f410713730c26ff048ec44Sumit Bose (例えば SSL の使用などで) 複数のポートを使うことを計画しているのであれば、
引数に <code>*:80</code> のようにポートも含めるようにしてください。
<directive module="core">NameVirtualHost</directive> ディレクティブで
IP アドレスを書いても、
自動的にサーバがその IP アドレスをリッスンするということはないことに
注意してください。詳細は「<a href="/bind.html">Apache の使うアドレスと
ポートを設定する</a>」を読んでください。さらに、ここで指定された
IP アドレスは全てサーバのネットワークインターフェースと関連付けられて
いなければなりません。</p>
<p>次は、扱うホストそれぞれに対して <directive type="section"
module="core">VirtualHost</directive> ブロックを
作成してください。<directive module="core" type="section">VirtualHost</directive>
ディレクティブの引数は <directive module="core">NameVirtualHost</directive>
ディレクティブの引数と同じにしてください (すなわち、IP アドレスか、全てのアドレスを意味する
<code>*</code>)。それぞれの <directive module="core" type="section">VirtualHost</directive>
ディレクティブの中には、最低限、どのホストが扱われるかを示す <directive
module="core">ServerName</directive> ディレクティブと、
そのホスト用のコンテンツがファイルシステム上のどこにあるかを示す
<directive module="core">DocumentRoot</directive> ディレクティブを
書く必要があります。</p>
<note><title>メインホストはなくなります</title>
<p>既にあるウェブサーバにバーチャルホストを追加する場合、
既存のウェブサーバに対しても <directive module="core"
type="section">VirtualHost</directive>
ブロックを作らなければなりません。このバーチャルホストの
<directive module="core">ServerName</directive> と
<directive module="core">DocumentRoot</directive>
は、グローバルな <directive module="core">ServerName</directive> と
<directive module="core">DocumentRoot</directive>
と同じものにします。また、このバーチャルホストを設定ファイルの中で
先頭に置いて、デフォルトホストとして動作するようにします。</p>
</note>
<p>たとえば、<code>www.domain.tld</code> を動かしていて、
さらにバーチャルホスト <code>www.otherdomain.tld</code>
を追加するとしましょう。このバーチャルホストは同一 IP を指しているとします。
そのような場合は、<code>httpd.conf</code>
に以下のようなコードを追加するだけです</p>
<example>
NameVirtualHost *:80<br />
<br />
&lt;VirtualHost *:80&gt;<br />
<indent>
ServerName www.domain.tld<br />
ServerAlias domain.tld *.domain.tld<br />
DocumentRoot /www/domain<br />
</indent>
&lt;/VirtualHost&gt;<br />
<br />
&lt;VirtualHost *:80&gt;<br />
<indent>ServerName www.otherdomain.tld<br />
DocumentRoot /www/otherdomain<br />
</indent>
&lt;/VirtualHost&gt;<br />
</example>
<p><directive module="core">NameVirtualHost</directive> 及び
<directive module="core">VirtualHost</directive> のどちらの場合も、
* の部分には明示的に IP アドレスを指定することができます。
例えば、ある IP アドレスでは名前ベースのバーチャルホストを使いたい一方で、
別の IP アドレスでは、他の IP ベースのバーチャルホストや
別組の名前ベースのバーチャルホストを使いたい場合、
そう設定することになるでしょう。</p>
<p>複数の名前でサーバアクセスができるようにしたいことも多いでしょう。
このようなことは、<directive module="core"
>ServerAlias</directive> ディレクティブを <directive module="core"
type="section">VirtualHost</directive>
セクションに記述することで実現できます。
例えば上記の <directive module="core"
type="section">VirtualHost</directive> の例であれば、
次のように一覧に挙げられた名前が、
ユーザが同一のウェブサイトとして目にして使用できるサーバ名である、
と <directive module="core">ServerAlias</directive>
ディレクティブで指定できます。</p>
<example>
ServerAlias domain.tld *.domain.tld
</example>
<p><code>domain.tld</code> ドメインへの全てのホストへのリクエストは
<code>www.domain.tld</code> のバーチャルホストが処理します。
名前をマッチさせるために、ワイルドカード文字 * や ?
を使用することもできます。もちろん思いつきの名前を作って、
<directive module="core">ServerName</directive> や
<directive module="core">ServerAlias</directive>
にその名前を書くといったことはできません。まずは、
これらの名前が サーバに付けられた IP アドレスにマップされるように
DNS サーバを適切に設定しなければなりません。</p>
<p>最後に、<directive module="core"
type="section">VirtualHost</directive> コンテナの中に
他のディレクティブを書くことで、バーチャルホストの設定を細かく調整
することができます。
ほとんどのディレクティブはこれらのコンテナに設置することができて、
変更点はそのバーチャルホストに対してのみ有効になります。
どのディレクティブを書くことができるかは、ディレクティブの <a
href="/mod/directive-dist.html#context">コンテキスト</a> を
調べてください。<em>主サーバコンテキスト</em>
(<directive module="core" type="section">VirtualHost</directive>
コンテナの外) の設定用ディレクティブはバーチャルホストでの設定で
上書きされない場合のみ使用されます。</p>
<p>リクエストが来ると、サーバはまず最初に <directive module="core"
type="section">NameVirtualHost</directive>
にマッチする IP アドレスかどうかをチェックします。マッチすれば
マッチした IP アドレスの <directive module="core"
type="section">VirtualHost</directive>
のそれぞれのセクションの中から
<directive module="core">ServerName</directive> か
<directive module="core">ServerAlias</directive>
に要求されたホスト名があるか探します。
見つかればそのサーバ用の設定を使います。マッチするバーチャルホスト
が見つからなければ、マッチした IP アドレスの
<strong>リストの最初にあるバーチャルホスト</strong> が使われます。</p>
<p>結果として、リストの最初のバーチャルホストが <em>デフォルト</em> の
バーチャルホストになります。IP アドレスが <directive
module="core">NameVirtualHost</directive>
ディレクティブにマッチした場合は、<em>メインのサーバ</em> の
<directive module="core">DocumentRoot</directive>
は<strong>決して使われません</strong>
どのバーチャルホストにもマッチしないリクエストに対して、
特別な設定をしたいのであれば、設定ファイル中の最初の
<code>&lt;VirtualHost&gt;</code> コンテナにそれを記述してください。</p>
</section>
<section id="compat"><title>古いブラウザとの互換性</title>
<p>以前述べたように、名前ベースのバーチャルホストが正しく動作する
ために必要な情報を送ってこないクライアントが依然として存在しています。
そのようなクライアントに対しては、該当する IP アドレスについて、
一番最初に設定されているバーチャルホスト
(<cite>プライマリ</cite>の名前ベースのバーチャルホスト)
からページが送り返されます。</p>
<note><title>どのぐらい古いの ?</title>
<p>「古い」と表現している場合、本当に古いことを意味して使っています。
不幸にして今現在でもこのような古いブラウザに遭遇することがあります。
現在のブラウザは全て、名前ベースのバーチャルホストに必要な
<code>Host</code> ヘッダを送ります。</p>
</note>
<p><a href="/mod/core.html#serverpath"><code>ServerPath</code></a>
ディレクティブで対処が可能です。ちょっと不格好ですけれども。</p>
<p>設定例</p>
<example>
NameVirtualHost 111.22.33.44<br />
<br />
&lt;VirtualHost 111.22.33.44&gt;<br />
<indent>
ServerName www.domain.tld<br />
ServerPath /domain<br />
DocumentRoot /web/domain<br />
</indent>
&lt;/VirtualHost&gt;<br />
</example>
<p>この例にはどういう意味があるでしょうか? これは
"<code>/domain</code>" で始まる URI へのリクエストはすべて、
バーチャルホスト <code>www.domain.tld</code> で処理される、
という意味です。つまり、すべてのクライアントで
<code>http://www.domain.tld/domain/</code> でアクセスできるページが、
<code>Host:</code> ヘッダを送ってくるクライアントであれば
<code>http://www.domain.tld/</code> としてもアクセスできる、
という意味です。</p>
<p>これが動作するようにするには、
プライマリのバーチャルホストのページに
<code>http://www.domain.tld/domain/</code> へのリンクを設置します。
そして、バーチャルホストのページでは、純粋な相対リンク (<em>例:</em>
"<code>file.html</code>" や "<code>/icons/image.gif</code>")、
あるいは <code>/domain/</code> で始まるリンク (<em>例:</em>
"<code>http://www.domain.tld/domain/misc/file.html</code>" や
"<code>/domain/misc/file.html</code>") だけを設置します。</p>
<p>これには、幾分かの規律が必要となりますが、
このようなガイドラインを忠実に守ることにより、たいていの場合、
すべてのブラウザで ― 新しいブラウザでも古いものでも ―
作成したページが見えるということを保証します。</p>
</section>
</manualpage>