私の理解では、DNS はドメイン名と、Web サイトが保存されているサーバーの IP アドレスをリンクしますが、これは各サーバーが保持できる Web サイトが 1 つだけであることを意味しますか? そうでない場合、同じサーバーに多数の Web サイトがある場合、サーバーの IP アドレスを呼び出すことで、必要な Web サイトがどれであるかをどのようにして判断するのでしょうか?
答え1
基本的に、ブラウザは HTTP リクエストにドメイン名を含めるため、Web サーバーはどのドメインがリクエストされたかを認識し、それに応じて応答できます。
HTTPリクエスト
典型的な HTTP リクエストは次のように発生します。
ユーザーは という形式で URL を提供します
http://host:port/path
。ブラウザはURLのホスト(ドメイン)部分を抽出し、必要に応じてIPアドレスに変換します。このプロセスは名前解決この変換は DNS 経由で実行できますが、必ずしもそうする必要はありません (たとえば、
hosts
一般的な OS 上のローカル ファイルは DNS をバイパスします)。ブラウザは、その IP アドレス上の指定されたポート (デフォルトではポート 80) への TCP 接続を開きます。
ブラウザは HTTP リクエストを送信します。HTTP/1.1 の場合は次のようになります。
GET /path HTTP/1.1 Host: example.com
(この
Host
ヘッダーは HTTP/1.1 では標準であり必須です。HTTP/1.0 仕様では指定されていませんが、一部のサーバーではサポートされています。)
ここから、Web サーバーは応答内容を決定するために使用できるいくつかの情報を得ることができます。1 つの Web サーバーが複数の IP アドレスにバインドされる可能性があることに注意してください。
- TCPソケットから要求されたIPアドレス
- クライアントのIPアドレスも利用可能ですが、これはめったに使用されません。ブロック/フィルタリングのために使用されることがあります。
- TCPソケットから要求されたポート
Host
HTTP リクエストのブラウザによってヘッダーに指定された、要求されたホスト名。- 要求されたパス
- その他のヘッダー(Cookie など)
ご存知のとおり、最近の最も一般的な共有ホスティング設定では、複数の Web サイトを単一の IP アドレスとポートの組み合わせに配置し、Host
Web サイトを区別するだけにしています。
これは、名前ベースの仮想ホストApacheの世界では、Nginxではサーバーブロック内のサーバー名IISは仮想サーバー。
HTTPSについてはどうですか?
HTTPS は少し異なります。TCP 接続の確立まではすべて同じですが、その後は暗号化された TLS トンネルを確立する必要があります。目的は、リクエストに関する情報を漏らさないことです。
サーバーが実際にこのドメインを所有していることを確認するために、サーバーは信頼できる第三者によって署名された証明書を送信する必要があります。ブラウザは、この証明書を要求したドメインと比較します。
これによって問題が発生します。HTTP リクエストを受信する前に、サーバーがどのホスト (Web サイト) の証明書を送信する必要があるかをどのように知るのでしょうか?
従来、この問題は、HTTPS を必要とするすべての Web サイトに専用の IP アドレス (またはポート) を割り当てることで解決されていました。しかし、IPv4 アドレスが不足し始めると、当然ながらこれが問題になります。
入力スニ(サーバー名表示)。ブラウザは TLS ネゴシエーション中にホスト名を渡すようになったため、サーバーはこの情報を早めに取得して正しい証明書を送信できるようになりました。サーバー側の構成は、HTTP 仮想ホストの構成と非常に似ています。
欠点は、ホスト名が暗号化される前にプレーンテキストとして渡され、実質的に漏洩した情報となることです。ホスト名は通常 DNS クエリで公開されるため、これは通常許容できるトレードオフと見なされます。
IP アドレスのみでサイトをリクエストするとどうなりますか?
要求された特定のホストがわからない場合にサーバーが行う処理は、サーバーの実装と構成によって異なります。通常、ホストを明示的に指定しないすべての要求に応答する「デフォルト」、「キャッチオール」、または「フォールバック」サイトが指定されます。
このデフォルト サイトは、サーバー管理者の設定に応じて、独自の独立したサイト (多くの場合、エラー メッセージが表示される) にすることも、サーバー上の他のサイトのいずれかにすることもできます。
答え2
技術者以外の人のために、この説明をします。
ジャック、ジル、ジョーは寮に住んでいて、携帯電話を持っていません。
電話帳では、すべて同じ番号でリストされます。(Aレコード)
番号をダイヤルすると、誰かが電話に出て、「ジルと話したいのですが」と言うと、ジルと電話がつながります。
電話帳に A レコード (電話番号/IP アドレス) ではなく、「Dormitory X」とだけ記載されている場合は、Dormitory X の番号をさらに探す必要があります。これは CNAME レコードです。
ジルが利用できない場合は、
- 404 ジルはここにいません
- 410 ジルは死んだ。
- 301 ジルはピーターの家に引っ越した
302 ジルはピーターを訪問しているので、代わりに彼に電話してください
400 あなたの言っていることが理解できません。
- 401 あなたは誰ですか?パスワードは何ですか?または午後10時以降は男性からの電話は受け付けていません
- 402 支払いが必要です (ジルは本当に彼女の本名ですか ;-) )
- 403 いいえ、それは正しいパスワードではありません。
- 418 ジルはティーポットです :-)
- 429 ジルはこれ以上電話を受けることができません。
451 あなたは接近禁止命令に違反しています。
500 電話システムが故障しました。
答え3
私の理解では、DNS はドメイン名と、Web サイトが保存されているサーバーの IP アドレスをリンクしますが、これは各サーバーが 1 つの Web サイトしか保持できないことを意味しますか?
まず、ここにはいくつかの異なる概念があることを理解する必要があります。
- Web サイトは、一貫した全体を形成する Web ページのグループです。
- IP アドレスは、インターネット プロトコルがトラフィックの送信元または送信先として使用する数値アドレス (IPv4 の場合は 32 ビット、IPv6 の場合は 128 ビット) です。
- サーバーは、クライアントからのリクエストを処理するマシンです。
- ホスト名、DNS でマシンを識別するために使用される名前 (例: "www.example.com" または "en.wikipedia.org")
これらのいずれにも 1 対 1 の関係はありません。1 つのサーバーに複数の IP アドレスを設定できます。複数のホスト名を 1 つの IP アドレスに指定できます。1 つのホスト名を複数の IP アドレスに指定できます。複数の Web サイトを同じホスト名にすることもできます。1 つの Web サイトを複数のホスト名にまたがって設定することもできます。
そうでない場合、同じサーバー上に多くの Web サイトがある場合、サーバーの IP アドレスを呼び出すことで、どの Web サイトが必要なのかをどうやって判断するのでしょうか?
昔 (HTTP 1.0 以前) は、サーバーが別々に処理したいホスト名ごとに、独自の IP アドレスが必要でした。これはかなり無駄でした。
HTTP 1.1 では、Host
HTTP リクエストの必須フィールドとして「ヘッダー」が追加されました (記憶が正しければ、一部のベンダーは以前からこれを拡張機能としてサポートしていました)。これにより、どのホスト名が要求されたかがサーバーに通知され、同じ IP アドレス上の異なるホスト名に対して異なるコンテンツを提供できるようになりました。クライアントでの HTTP 1.1 のサポートは、現在では広く普及しています。
残念ながら、SSL (後の TLS) では問題が 1 つ追加されました。SSL/TLS セッションを確立するには、サーバーが要求されたホスト名をカバーする証明書をクライアントに提示する必要がありますが、HTTP 要求は SSL/TLS セッションが確立されるまで届きません。
SubjectAltName
フィールドを使用するか、フィールドでワイルドカードを使用することで、1 つの証明書で複数のホスト名をカバーすることができますCommonName
。ただし、特に関連するホスト名が異なる所有権を持つドメインの下にある場合は、管理上の課題が生じます。
そこで、TLS では「サーバー名表示」(SNI) 拡張機能が導入されました。この拡張機能により、クライアントは TLS ハンドシェイク手順中に要求されたホスト名をサーバーに送信します。サーバーは適切な証明書を提示できます。残念ながら、すべての主要な SSL/TLS 実装の現在のバージョンは SNI をサポートしていますが、古いバージョンが使用されなくなるまでには長い時間がかかりました。
答え4
DNSを使用すると、個々のIPアドレスに任意の数の名前を割り当てることができます(ホストファイルたとえば、各名前をスペースで区切ることもできます。DNSサーバーを使用すると、1つの名前に複数のIPアドレスを割り当てる1対1の関係に限定されません。
ウェブサーバーはどのサイトをサービスするかを知っている検査する要求された URL。どのドメインが要求されたか、どのポートが要求されたか、どのプロトコルが使用されたかを確認します。これは DNS とは関係なく、HTTP プロトコルによって処理されます。