Apache仮想ホストの設定例


このドキュメントでは、仮想ホストの設定時によく聞かれる質問について説明します.これらの例では、1つのサーバ上でドメイン名ベースまたはIPベースの仮想ホストを介して複数のWebサイトを導入する方法を示します.もう1つのエージェント・サーバの後に複数のサーバ・ベースのサイトを構築する方法についての説明ドキュメントもすぐに表示されます.
  • は、1つのIPアドレス上で複数のドメイン名ベースのウェブサイトを実行する.
  • は、1つ以上のIPの場合、ドメイン名ベースの仮想ホストを使用する.
  • は、異なるIPのアドレス(例えば、内部アドレスおよび外部アドレス)上で同じ内容を提供する.
  • は、異なるポート上で異なるサイトを実行します.
  • IPベースの仮想ホスト
  • を確立する
  • ポートベースおよびIPベースの仮想ホスト
  • を混在させる
  • ドメイン名ベースとipベースの仮想ホスト
  • を混在させる
  • _default_仮想ホスト
  • を使用
  • ドメイン名ベースの仮想ホストをIPベースの仮想ホスト
  • に移植する
  • ServerPath命令
  • を用いる.
    1つのIPアドレス上でドメイン名ベースのWebサイトを複数実行します.
    サーバにはIPアドレスがあり、DNSにはこのマシンにマッピング(CNAMES)がたくさんあります.このマシンでwww.example1.comwww.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.1172.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.40172.20.30.50)がある場合は、ドメイン名www.example1.comwww.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変数を任意に使用できることを保証するために使用される.