web-dev-qa-db-ja.com

ServerNameとServerAliasはどのように機能しますか?

それは私がさらに明確にする必要がある仮想ホスト構成の次の部分です:

<VirtualHost *:80>
  # Admin email, Server Name (domain name), and any aliases
  ServerAdmin [email protected]
  ServerName  141.29.495.999
  ServerAlias example.com
...

これは、私が現在持っているものと同様の設定例です(現時点ではドメイン名を持っていません)。

<VirtualHost *:80>-このサーバーにアクセスできるIPへのポート80で行われたすべてのHTTPリクエストに対して、次の設定を許可します。たとえば、サーバーに複数のIPでアクセスできる場合、このディレクティブを両方ではなく1つだけに制限できます。

ServerName-HTTPリクエストのホスト部分がこの名前と一致する場合、リクエストを許可します。通常、これはIPにマップするドメイン名ですが、この場合、HTTPリクエストホストはこのIPと一致する必要があります。

ServerAlias-サーバーが受け入れる代替名。

上記のシナリオでは、ServerAlias mytestname.comを設定してからmytestname.comにHTTPリクエストを送信すると、サーバーのIPをポイントするDNSレコードが必要になるため、混乱を招きます。 ?どの場合、ServerAliasは基本的にEXTRA ServerNameエントリだけですか?

たとえば、foobar.com = 141.29.495.999のようなDNSエントリがあったが、ServerName = 141.29.495.999があり、ServerAliasが空だったとすると、foobar.comは正しいIPに解決されますが、foobarを受け入れる参照がないためです。 .com in ServerNameまたはServerAlias

か何か。私は混乱しています。

67
njp

次のように考えてください。

DNSは電話帳/黄色のページです。誰かがあなたの電話にかけたいとき、彼らはあなたの名前を調べてあなたの電話番号を手に入れ、その電話に電話をかけることができます。 DNSも同じですが、コンピュータの場合-誰かがwww.example.comに行きたい場合、DNSにIPアドレスを要求し、そのIPアドレスを持つコンピュータに連絡できます。それがresolveの意味です。 IPアドレスの解決は、Apacheとは何の関係もありません。厳密にはDNSの質問です。

ServerNameおよびServerAliasは、会社の内部電話リストに似ています。あなたのウェブサーバーはスイッチボードです。サーバーへのすべての着信接続を受け入れます。次に、クライアント/呼び出し元は彼らが探している名前をそれらに伝え、それはその名前を処理する方法についてApache構成を調べます。

名前がApache構成でServerName/ServerAliasとしてリストされていない場合、Apacheは常に最初にリストされているVirtualHostを提供します。または、VirtualHostがまったくない場合、リクエストでどのホスト名が指定されていても、同じコンテンツが提供されます。

ETA:それで、通常の接続のためのステップバイステップ:

  1. ブラウザにhttp://www.example.comと入力します。
  2. コンピューターは、www.example.comと通信するときに使用するIPアドレスをDNSリゾルバーに要求します。
  3. コンピューターはそのIPアドレスに接続し、www.example.com(HTTPのHost:headerです)と通信したいと言っています。
  4. Webサーバーはその構成を調べて、www.example.comからのコンテンツのリクエストをどう処理するかを理解します。次のいずれかが発生する可能性があります:
    • www.example.comは、ServerNameServerAliasまたはVirtualHostとしてリストされます。その場合、そのVirtualHostの構成を使用してコンテンツを配信します。
    • サーバーにはVirtualHostsがまったくありません。その場合は、httpd.confの構成を使用してコンテンツを配信します。
    • サーバーにはVirtualHostsがありますが、www.example.comはそれらのいずれにもリストされていません。リストされている場合、リストの最初のVirtualhostがコンテンツの配信に使用されます。
109
Jenny D

ServerNameを定義しない場合、Apache2は/ etc/hostsから推測しようとします。 ServerAliasはオプションです。最も一般的な使用例は、

ServerName example.com
ServerAlias www.example.com

ドメインの登録やDNSレコードの設定など、リクエストがウェブサーバーのIPに確実に到達するようにするのは、Apache2の仕事ではなく、あなた次第です。ドメインとDNSレコードなしでこれを行う(テストおよび開発の)非常に一般的な方法は、example.comがサーバーのIPを指すようにローカルマシンの/ etc/hostsファイルを設定することです。

192.168.0.12 example.com
192.168.0.12 www.example.com
20
blau

このトピックに関する公式ドキュメントを読むことを強くお勧めします: https://httpd.Apache.org/docs/2.4/vhosts/name-based.html

"最も一致するIPアドレスとポートの組み合わせを含む仮想ホストのセットに一致するServerNameまたはServerAliasが見つからない場合は、最初にリストされている、一致する仮想ホストが使用されます。 "。したがって、「foobar.com」にアクセスした場合、IP 141.29.495.999と何らかの形で一致する最初のVirtualHostエントリがhttpdによって使用されます。

同じドキュメントは、「多くのサーバーが複数の名前でアクセスできることを望んでいます。これは、ServerAliasディレクティブで可能です」と述べています。したがって、ServerAliasは単に追加のServerNameエントリと見なすことができます。

1