ホームページ » の仕方 » Webサーバーにはそれぞれ1つのWebサイトしかありませんか。

    Webサーバーにはそれぞれ1つのWebサイトしかありませんか。

    ドメイン名、IPアドレス、Webサーバー、およびWebサイトがどのように連携して機能するのかを初めて学び始めると、少し混乱したり圧倒されたりすることがあります。どのようにしてすべてがそれほどスムーズに機能するように設定されていますか?本日のSuperUser Q&A投稿には、興味をそそられる読者の質問に対する答えがあります。.

    本日の質疑応答セッションは、コミュニティ主導のQ&A Webサイトのグループである、Stack Exchangeの下位区分であるSuperUserの好意により提供されます。.

    Rosmarie Voegtli(Flickr)の写真提供.

    質問

    SuperUser読者user3407319は、Webサーバーがそれぞれ1つのWebサイトしか持っていないかどうかを知りたいです。

    私がDNSについて理解していることと、Webサイトが保存されているWebサーバーのIPアドレスとドメイン名をリンクすることに基づいて、それは各Webサーバーが1つのWebサイトしか保持できないことを意味しますか? Webサーバーが複数のWebサイトを保持している場合、問題なくWebサイトにアクセスしたり、混乱したりすることなく、すべてのWebサイトを解決する方法はありますか。?

    Webサーバーはそれぞれ1つのWebサイトのみを保持しますか、それとも複数のWebサイトを保持しますか。?

    答え

    SuperUserの寄稿者Bobが私たちに答えを持っています。

    基本的に、ブラウザはHTTPリクエストにドメイン名を含めるので、Webサーバはどのドメインがリクエストされたかを認識し、それに応じて応答することができます。.

    HTTPリクエスト

    一般的なHTTPリクエストは次のようになります。

    1. ユーザーはhttp:// host:port / pathの形式でURLを入力します。.

    2. ブラウザはURLのホスト(ドメイン)部分を抽出し、名前解決と呼ばれるプロセスで(必要に応じて)IPアドレスに変換します。この変換はDNSを介して実行できますが、実行する必要はありません(たとえば、一般的なオペレーティングシステムのローカルホストファイルはDNSをバイパスします)。.

    3. ブラウザは指定されたポートへのTCP接続を開くか、デフォルトでそのIPアドレスのポート80に設定します。.

    4. ブラウザがHTTPリクエストを送信します。 HTTP / 1.1の場合、これは次のようになります。

    ホストヘッダーは標準的なもので、HTTP / 1.1では必須です。 HTTP / 1.0仕様では指定されていませんが、とにかくサポートしているサーバもあります。.

    ここから、Webサーバーは、応答が何であるべきかを決定するために使用できるいくつかの情報を持ちます。単一のWebサーバーを複数のIPアドレスにバインドすることが可能です。.

    • TCPソケットから要求されたIPアドレス(クライアントのIPアドレスも利用可能ですが、これはめったに使用されず、場合によってはブロック/フィルタリングに使用されます)
    • TCPソケットからの要求されたポート
    • HTTPリクエストでブラウザによってホストヘッダーに指定されたリクエストされたホスト名
    • 要求されたパス
    • その他のヘッダ(クッキーなど)

    お気づきのように、最近の最も一般的な共有ホスティング設定では、複数のWebサイトが単一のIPアドレス:ポートの組み合わせに配置され、Webサイトを区別するためにホストだけが残されています。.

    これは、Apache-landでは名前ベースの仮想ホストとして知られていますが、Nginxはそれらをサーバーブロック内のサーバー名と呼び、IISは仮想サーバーを好みます。.

    HTTPSについて?

    HTTPSは少し異なります。 TCP接続の確立まではすべて同じですが、その後暗号化されたTLSトンネルを確立する必要があります。目標は、要求に関する情報を漏らさないことです。.

    Webサーバーが実際にこのドメインを所有していることを確認するために、Webサーバーは信頼できる第三者によって署名された証明書を送信する必要があります。ブラウザはこの証明書を要求したドメインと比較します。.

    これは問題を提起します。 HTTPリクエストを受信する前にWebサーバーが送信する必要がある場合、どのホスト/ Webサイトの証明書をどのようにして送信するのか?

    これまでは、HTTPSを必要とするすべてのWebサイトに専用のIPアドレス(またはポート)を割り当てることでこれを解決していました。明らかに、これは私達がIPv4アドレスを使い果たしているので問題になりました.

    SNI(サーバ名表示)を入力してください。ブラウザはTLSネゴシエーション中にホスト名を渡すようになりました。そのため、Webサーバーは正しい証明書を送信するのに十分早くこの情報を持っています。 Webサーバー側では、設定はHTTP仮想ホストの設定方法と非常によく似ています。.

    欠点は、ホスト名が暗号化前にプレーンテキストとして渡されるようになり、本質的に情報が漏洩することです。とにかくホスト名が通常DNSクエリで公開されることを考えると、これは通常許容できるトレードオフと見なされます.

    IPアドレスのみでWebサイトをリクエストした場合?

    どの特定のホストを要求したかがわからないときにWebサーバーが何をするかは、Webサーバーの実装と構成によって異なります。通常、ホストを明示的に指定していないすべての要求に対して応答を提供する「デフォルト」、「キャッチオール」、または「フォールバック」Webサイトが指定されています。.

    このデフォルトWebサイトは、独自の独立したWebサイト(多くの場合エラーメッセージを表示する)でも、Webサーバー管理者の設定に応じてWebサーバー上の他のWebサイトでもかまいません。.


    説明に追加するものがありますか?コメントで音を消す。他の技術に精通したStack Exchangeユーザーからの回答をもっと読みたいですか?こちらのディスカッションスレッドをチェックしてください。.