Apache仮想ホストの設定例
このドキュメントでは、仮想ホストの設定時によく聞かれる質問について説明します.これらの例では、1つのサーバ上でドメイン名ベースまたはIPベースの仮想ホストを介して複数のWebサイトを導入する方法を示します.もう1つのエージェント・サーバの後に複数のサーバ・ベースのサイトを構築する方法についての説明ドキュメントもすぐに表示されます.は、1つのIPアドレス上で複数のドメイン名ベースのウェブサイトを実行する. は、1つ以上のIPの場合、ドメイン名ベースの仮想ホストを使用する. は、異なるIPのアドレス(例えば、内部アドレスおよび外部アドレス)上で同じ内容を提供する. は、異なるポート上で異なるサイトを実行します. IPベースの仮想ホスト を確立するポートベースおよびIPベースの仮想ホスト を混在させるドメイン名ベースとipベースの仮想ホスト を混在させる を使用ドメイン名ベースの仮想ホストをIPベースの仮想ホスト に移植する を用いる.
1つのIPアドレス上でドメイン名ベースのWebサイトを複数実行します.
サーバにはIPアドレスがあり、DNSにはこのマシンにマッピング(CNAMES)がたくさんあります.このマシンで
に注意
Apacheサーバの構成で仮想ホストを作成しても、DNSでホスト名が自動的に更新されません.DNSにドメイン名を追加してIPアドレスを指定する必要があります.そうでなければ、他の人はあなたのwebサイトを見ることができません.
サーバ構成
アスタリスクはすべてのアドレスに一致するため、プライマリ・サーバはリクエストを受信しません.
に注意
必要に応じて、
いずれにしても、IPアドレスが特定できない場合は、
上記の構成は、ほとんどの場合、ドメイン名ベースの仮想ホストを使用する場合に使用します.実際には、異なるIPアドレスやポートに異なるコンテンツを提供したい場合にのみ、このような構成では満足できません.
1つ以上のIPの場合、ドメイン名ベースの仮想ホストが使用されます.
に注意
ここで議論するいかなる技術も、任意の数のIPアドレスを使用することに広げることができる.
サーバには2つのIPアドレスがあります.1つ(
サーバ構成
同じ内容は、異なるIPのアドレス(例えば、1つの内部アドレスおよび1つの外部アドレス)に提供される.
サーバには2つのIPアドレス(
サーバは、内部および外部からのリクエストに同じコンテンツを提供するように構成できます.この目的を達成するには、
サーバ構成
これで、異なるネットワークから送信されたリクエストは、同じ
注意:
イントラネットでは、
上記の例と同様に、具体的なIPアドレスの代わりに
異なるポートで異なるサイトを実行します.
同じIPの異なるポートに複数のドメイン名をサーボさせたい場合.この目的を達成するには、「NameVirtualHost」タブでポートを定義する方法を使用します.NameVirtualHost name:portを使用するか、Listenコマンドを直接使用する場合は、構成は有効になりません.
サーバ構成
IPベースの仮想ホストの構築
2つのIPアドレス(
サーバ構成
プライマリサーバ(main server)が存在する場合、いずれの
ポートベースとIPベースの仮想ホストの混在
サーバに2つのIPアドレス(
サーバ構成
ドメイン名ベースとipベースの仮想ホストの混在
ドメイン名ベースの仮想ホストをいくつかのアドレスで構成し、IPベースの仮想ホストを別のアドレスで構成したい場合は、
サーバ構成
すべてのポートに対して
このようにして、指定されていないIPアドレスおよびポートへの要求をキャプチャするように構成される.たとえば、仮想ホストで使用されていないアドレス/ポートペアです.
サーバ構成
このようなワイルドカードポートを使用するデフォルトの仮想ホストを使用すると、リクエストがプライマリ・サーバに受信されることを効果的に防止できます.
ドメイン名ベースの仮想ホストですでに使用されているアドレス/ポートがある場合、デフォルトの仮想ホストは、このアドレス/ポートに送信されたリクエストを決して処理しません.要求された
異なるポートに
1つ目と同様に、サーバに多くのポートをリスニングさせ、2つ目の
サーバ構成
80ポートをリスニングするデフォルトの仮想ホスト(ワイルドカードポートを使用するすべての仮想ホストの前に表示する必要があります)は、指定されていないIPアドレスに送信されたすべての要求をキャプチャします.プライマリ・サーバは、要求をサーボするために使用されません.
ポート構成
80ポートで唯一のデフォルトの仮想ホストを作成したい場合は、次のように構成します.
サーバ構成
設定されていないアドレスの80ポートへの要求は、この仮想ホストをサーボします.また、設定されていないアドレスの他のポートへの要求はメインサーバサーボとなります.
ドメイン名ベースの仮想ホストをIPベースの仮想ホストに移植
サーバ構成
この仮想ホストは、新しいアドレス(IPベースの仮想ホストとして表現される)と古いアドレス(ドメイン名ベースの仮想ホストとして表現される)で同時にアクセスできるようになりました.
1つのサーバでドメイン名ベースの仮想ホストを2つ実行した場合.正しい仮想ホストに一致するために、クライアントは正しい
Server configuration
_default_
仮想ホストServerPath
命令1つのIPアドレス上でドメイン名ベースのWebサイトを複数実行します.
サーバにはIPアドレスがあり、DNSにはこのマシンにマッピング(CNAMES)がたくさんあります.このマシンで
www.example1.com
とwww.example2.org
の2つのサイトを実行します.に注意
Apacheサーバの構成で仮想ホストを作成しても、DNSでホスト名が自動的に更新されません.DNSにドメイン名を追加してIPアドレスを指定する必要があります.そうでなければ、他の人はあなたのwebサイトを見ることができません.
hosts
ファイルにこのエントリを追加してテストできますが、この方法はこれらのエントリを持つマシンでのみ使用できます.サーバ構成
# Ensure that Apache listens on port 80
Listen 80
# Listen for virtual host requests on all IP addresses
NameVirtualHost *
DocumentRoot /www/example1
ServerName www.example1.com
# Other directives here
DocumentRoot /www/example2
ServerName www.example2.org
# Other directives here
アスタリスクはすべてのアドレスに一致するため、プライマリ・サーバはリクエストを受信しません.
www.example1.com
は、最初にプロファイルに表示されるため、デフォルトまたはプライマリ・サーバとみなすことができる最高の優先度を有します.これは、受信された要求がServerName
命令と一致しない場合、第1のVirtualHost
によってサーボされることを意味する.に注意
必要に応じて、
*
の代わりに特定のIPアドレスを使用できます.この場合、VirtualHost
のパラメータは、NameVirtualHost
のパラメータと一致する必要があります.NameVirtualHost 172.20.30.40
# etc ...
いずれにしても、IPアドレスが特定できない場合は、
*
を使用するのが便利です.例えば、ISPが動的IPアドレスを構成し、動的ドメイン名解析システムを使用している場合などです.*
は任意のIPアドレスに一致するため、このような場合、IPアドレスがどのように変化しても、別途構成する必要はありません.上記の構成は、ほとんどの場合、ドメイン名ベースの仮想ホストを使用する場合に使用します.実際には、異なるIPアドレスやポートに異なるコンテンツを提供したい場合にのみ、このような構成では満足できません.
1つ以上のIPの場合、ドメイン名ベースの仮想ホストが使用されます.
に注意
ここで議論するいかなる技術も、任意の数のIPアドレスを使用することに広げることができる.
サーバには2つのIPアドレスがあります.1つ(
172.20.30.40
)は、プライマリサーバであるserver.domain.com
に使用され、もう1つ(172.20.30.50
)は、2つ以上の仮想ホストを構築するために使用されます.サーバ構成
Listen 80
# This is the "main" server running on 172.20.30.40
ServerName server.domain.com
DocumentRoot /www/mainserver
# This is the other address
NameVirtualHost 172.20.30.50
DocumentRoot /www/example1
ServerName www.example1.com
# Other directives here ...
DocumentRoot /www/example2
ServerName www.example2.org
# Other directives here ...
172.20.30.50
でない要求は、プライマリ・サーバによってサーボされます.一方、172.20.30.50
に送信されたホスト名がないか、Host:
ヘッダがない要求は、www.example1.com
サーボになります.同じ内容は、異なるIPのアドレス(例えば、1つの内部アドレスおよび1つの外部アドレス)に提供される.
サーバには2つのIPアドレス(
192.168.1.1
と172.20.30.40
)があります.この機械は内部(ローカルエリアネットワーク)ネットワークと外部(広域ネットワーク)の間にある.外部では、ドメイン名server.example.com
は外部アドレス(172.20.30.40
)を指し、内部では同じドメイン名は内部アドレス(192.168.1.1
)を指す.サーバは、内部および外部からのリクエストに同じコンテンツを提供するように構成できます.この目的を達成するには、
VirtualHost
構成セグメントを1つだけ必要とします.サーバ構成
NameVirtualHost 192.168.1.1
NameVirtualHost 172.20.30.40
DocumentRoot /www/server1
ServerName server.example.com
ServerAlias server
これで、異なるネットワークから送信されたリクエストは、同じ
VirtualHost
によってサーボされます.注意:
イントラネットでは、
server
という名前を使用して、server.example.com
のフルネームの代わりに使用できます.上記の例と同様に、具体的なIPアドレスの代わりに
*
を使用すると、すべてのアドレスに同じ内容を返すことができます.異なるポートで異なるサイトを実行します.
同じIPの異なるポートに複数のドメイン名をサーボさせたい場合.この目的を達成するには、「NameVirtualHost」タブでポートを定義する方法を使用します.NameVirtualHost name:portを使用するか、Listenコマンドを直接使用する場合は、構成は有効になりません.
サーバ構成
Listen 80
Listen 8080
NameVirtualHost 172.20.30.40:80
NameVirtualHost 172.20.30.40:8080
ServerName www.example1.com
DocumentRoot /www/domain-80
ServerName www.example1.com
DocumentRoot /www/domain-8080
ServerName www.example2.org
DocumentRoot /www/otherdomain-80
ServerName www.example2.org
DocumentRoot /www/otherdomain-8080
IPベースの仮想ホストの構築
2つのIPアドレス(
172.20.30.40
および172.20.30.50
)がそれぞれ対応するドメイン名www.example1.com
およびwww.example2.org
のサービス構成は、以下の通りである.サーバ構成
Listen 80
DocumentRoot /www/example1
ServerName www.example1.com
DocumentRoot /www/example2
ServerName www.example2.org
プライマリサーバ(main server)が存在する場合、いずれの
命令にも現れない要求(例えば、localhost
の要求)は、プライマリサーバによってサーボされる.ポートベースとIPベースの仮想ホストの混在
サーバに2つのIPアドレス(
172.20.30.40
と172.20.30.50
)がある場合は、ドメイン名www.example1.com
とwww.example2.org
に対応します.ドメイン名ごとに、80ポートと8080ポートでWebサイトを公開します.次のように構成できます.サーバ構成
Listen 172.20.30.40:80
Listen 172.20.30.40:8080
Listen 172.20.30.50:80
Listen 172.20.30.50:8080
DocumentRoot /www/example1-80
ServerName www.example1.com
DocumentRoot /www/example1-8080
ServerName www.example1.com
DocumentRoot /www/example2-80
ServerName www.example1.org
DocumentRoot /www/example2-8080
ServerName www.example2.org
ドメイン名ベースとipベースの仮想ホストの混在
ドメイン名ベースの仮想ホストをいくつかのアドレスで構成し、IPベースの仮想ホストを別のアドレスで構成したい場合は、
サーバ構成
Listen 80
NameVirtualHost 172.20.30.40
DocumentRoot /www/example1
ServerName www.example1.com
DocumentRoot /www/example2
ServerName www.example2.org
DocumentRoot /www/example3
ServerName www.example3.net
# IP-based
DocumentRoot /www/example4
ServerName www.example4.edu
DocumentRoot /www/example5
ServerName www.example5.gov
_default_
仮想ホストの使用すべてのポートに対して
_default_
仮想ホストを構成このようにして、指定されていないIPアドレスおよびポートへの要求をキャプチャするように構成される.たとえば、仮想ホストで使用されていないアドレス/ポートペアです.
サーバ構成
DocumentRoot /www/default
このようなワイルドカードポートを使用するデフォルトの仮想ホストを使用すると、リクエストがプライマリ・サーバに受信されることを効果的に防止できます.
ドメイン名ベースの仮想ホストですでに使用されているアドレス/ポートがある場合、デフォルトの仮想ホストは、このアドレス/ポートに送信されたリクエストを決して処理しません.要求された
Host:
ヘッダに未知の情報が含まれている場合、または単に存在しない場合、ドメイン名ベースの最初の仮想ホスト(プロファイルに最初に現れたアドレス/ポートペアを使用した仮想ホスト)によって処理されます.AliasMatch
またはRewriteRule
を使用して、単純な情報ページ(a single information page)(またはスクリプト)を指すように要求を書き換えることができます.異なるポートに
_default_
仮想ホストを配備1つ目と同様に、サーバに多くのポートをリスニングさせ、2つ目の
_default_
仮想ホストに80ポートを個別にリスニングさせたいと考えています.サーバ構成
DocumentRoot /www/default80
# ...
DocumentRoot /www/default
# ...
80ポートをリスニングするデフォルトの仮想ホスト(ワイルドカードポートを使用するすべての仮想ホストの前に表示する必要があります)は、指定されていないIPアドレスに送信されたすべての要求をキャプチャします.プライマリ・サーバは、要求をサーボするために使用されません.
ポート構成
_default_
仮想ホスト80ポートで唯一のデフォルトの仮想ホストを作成したい場合は、次のように構成します.
サーバ構成
DocumentRoot /www/default
...
設定されていないアドレスの80ポートへの要求は、この仮想ホストをサーボします.また、設定されていないアドレスの他のポートへの要求はメインサーバサーボとなります.
ドメイン名ベースの仮想ホストをIPベースの仮想ホストに移植
www.example2.org
ドメイン名を有する仮想ホスト(すなわち、ドメイン名構成例の2番目)が独自のIPアドレスを取得した場合.一部のドメイン名サーバやエージェントサーバが移植中にこのドメイン名を古い解析を行うことを避けるために、新しいIPアドレスと古いIPアドレスの解析を同時に提供する移行方法を採用することができます.この目的を達成するのは簡単だ.新しいアドレス(172.20.30.50
)をVirtualHost
命令に簡単に追加すればいいからです.サーバ構成
Listen 80
ServerName www.example1.com
DocumentRoot /www/example1
NameVirtualHost 172.20.30.40
DocumentRoot /www/example2
ServerName www.example2.org
# ...
DocumentRoot /www/example3
ServerName www.example3.net
ServerAlias *.example3.net
# ...
この仮想ホストは、新しいアドレス(IPベースの仮想ホストとして表現される)と古いアドレス(ドメイン名ベースの仮想ホストとして表現される)で同時にアクセスできるようになりました.
ServerPath
命令の使用1つのサーバでドメイン名ベースの仮想ホストを2つ実行した場合.正しい仮想ホストに一致するために、クライアントは正しい
Host:
ヘッダを送信する必要があります.従来のHTTP/1.0を使用していたクライアントはこのようなヘッダを送信できなかったため、Apacheはクライアントがどの仮想ホストに接続したいのかを判別できなかった(この要求をプライマリ仮想ホストでサーボする).下位互換性を最小限に抑えるために、ドメイン名ベースの仮想ホストへのURL接頭辞へのリンクを追加するページを返すプライマリ仮想ホストを提供できます.Server configuration
NameVirtualHost 172.20.30.40
# primary vhost
DocumentRoot /www/subdomain
RewriteEngine On
RewriteRule ^/.* /www/subdomain/index.html
# ...
DocumentRoot /www/subdomain/sub1
ServerName www.sub1.domain.tld
ServerPath /sub1/
RewriteEngine On
RewriteRule ^(/sub1/.*) /www/subdomain$1
# ...
DocumentRoot /www/subdomain/sub2
ServerName www.sub2.domain.tld
ServerPath /sub2/
RewriteEngine On
RewriteRule ^(/sub2/.*) /www/subdomain$1
# ...
ServerPath
命令の作用により、http://www.sub1.domain.tld/sub1/
に送信された要求は、sub 1−vhostによって常にサーボされる.クライアントが正しいHost:
ヘッダを送信した場合、http://www.sub1.domain.tld/
に送信された要求指揮はsub 1−vhostによってサーボされる.Host:
ヘッダが送信されない場合、クライアントは、プライマリ仮想ホストから送信された情報ページを取得する.クライアントがHost:
ヘッダを送信していない場合、http://www.sub2.domain.tld/sub1/
に送信されたリクエストはsub 1-vhostサーボされます.RewriteRule
命令は、Host:
ヘッダが正しく送信されたクライアントが、URLプレフィックスを使用するか使用しないかのような2つのURL変数を任意に使用できることを保証するために使用される.