D'après ce que je comprends du lien DNS, le nom de domaine avec l'adresse IP du serveur sur lequel le site Web est stocké, cela signifie-t-il que chaque serveur ne peut contenir qu'un seul site Web? Si ce n'est pas le cas, comment appeler l'adresse IP du serveur sait-il quel site Web je veux s'il y en a beaucoup sur le même serveur?
80
Host:
tête. En cas d'hébergement partagé, le serveur Web peut être configuré par le fournisseur pour le gérer de différentes manières (par exemple, avoir une valeur par défaut, rediriger le fournisseur, etc.).Réponses:
Fondamentalement: le navigateur inclut le nom de domaine dans la requête HTTP afin que le serveur Web connaisse le domaine demandé et puisse répondre en conséquence.
Requêtes HTTP
Voici comment se passe votre requête HTTP typique:
L'utilisateur fournit une URL, sous la forme
http://host:port/path
.Le navigateur extrait la partie hôte (domaine) de l'URL et la traduit si nécessaire en adresse IP, dans le cadre d'un processus appelé résolution de nom . Cette traduction peut se faire via DNS, mais cela n’est pas obligatoire (par exemple, le
hosts
fichier local sur les systèmes d’exploitation courants contourne DNS).Le navigateur ouvre une connexion TCP sur le port spécifié ou sur le port 80 par défaut pour cette adresse IP.
Le navigateur envoie une requête HTTP. Pour HTTP / 1.1, cela ressemble à ceci:
(L'en-
Host
tête est standard et requis dans HTTP / 1.1. Il n'a pas été spécifié dans les spécifications HTTP / 1.0, mais certains serveurs le prennent en charge de toute façon.)À partir de là, le serveur Web dispose de plusieurs informations qu'il peut utiliser pour décider de la réponse. Notez qu'il est possible qu'un seul serveur Web soit lié à plusieurs adresses IP.
Host
tête par le navigateur dans la requête HTTP.Comme vous semblez l'avoir remarqué, la configuration d'hébergement mutualisé la plus commune de nos jours met plusieurs sites Web sous une seule adresse IP: combinaison de port, ne laissant que la
Host
différence entre les sites Web.Ceci s'appelle un hôte virtuel basé sur un nom dans Apache-land, tandis que Nginx les appelle noms de serveur dans des blocs de serveur et qu'IIS préfère Virtual Server .
Qu'en est-il de HTTPS?
HTTPS est un peu différent. Tout est identique jusqu'à l'établissement de la connexion TCP, mais après cela, un tunnel TLS crypté doit être établi. L'objectif est de ne pas divulguer d'informations sur la demande.
Afin de vérifier que le serveur possède réellement ce domaine, le serveur doit envoyer un certificat signé par un tiers de confiance. Le navigateur comparera ensuite ce certificat avec le domaine demandé.
Cela pose un problème. Comment le serveur sait-il quel certificat d'hôte (site Web) envoyer, s'il doit le faire avant la réception de la demande HTTP?
Traditionnellement, cela était résolu en ayant une adresse IP dédiée (ou un port) pour chaque site Web nécessitant HTTPS. Évidemment, cela devient problématique lorsque nous commençons à manquer d'adresses IPv4.
Entrez SNI (Indication du nom du serveur). Le navigateur transmet maintenant le nom d'hôte lors des négociations TLS. Le serveur dispose donc de ces informations suffisamment tôt pour envoyer le certificat correct. Du côté du serveur, la configuration est très similaire à la configuration des hôtes virtuels HTTP.
L'inconvénient est que le nom d'hôte est maintenant passé en texte brut avant le cryptage et constitue essentiellement une fuite d'informations. Cela est généralement considéré comme un compromis acceptable, étant donné que le nom d’hôte est normalement exposé dans une requête DNS.
Et si vous demandez un site par adresse IP uniquement?
Ce que le serveur fait lorsqu'il ne sait pas quel hôte spécifique vous avez demandé dépend de la mise en œuvre et de la configuration du serveur. En règle générale, un site "par défaut", "catchall" ou "fallback" est spécifié et fournira des réponses à toutes les demandes ne spécifiant pas explicitement un hôte.
Ce site par défaut peut être son propre site indépendant (affichant souvent un message d'erreur) ou l'un des autres sites du serveur, en fonction des préférences de l'administrateur du serveur.
la source
J'ai cette explication pour les non-techniciens.
Jack, Jill et Joe vivent dans un dortoir et ils n'ont pas de téléphone portable.
Dans le répertoire, ils sont tous répertoriés avec le même numéro. (Un enregistrement)
Vous composez le numéro et quelqu'un décroche le téléphone; vous dites "j'aimerais parler à Jill" et vous la mettez en ligne.
Au lieu d'un enregistrement A (numéro de téléphone / adresse IP) dans le répertoire, il peut simplement indiquer "Dormitory X", vous devez alors rechercher plus avant le numéro du Dormitory X. Il s'agit d'un enregistrement CNAME.
Si Jill n'est pas disponible, vous pourriez obtenir
302 Jill rend visite à Peter, appelle-le à la place
400 Je ne peux pas vous comprendre.
451 Vous violez votre ordonnance d'interdiction.
500 Notre système téléphonique est tombé en panne.
la source
Tout d'abord, vous devez comprendre qu'il existe un certain nombre de concepts distincts ici.
Il n'y a pas de relation un-à-un entre ces choses. Un serveur peut avoir plusieurs adresses IP. plusieurs noms d'hôte peuvent pointer vers une seule adresse IP; un nom d'hôte peut pointer vers plusieurs adresses IP. Plusieurs sites Web peuvent être sous le même nom d'hôte. Un site Web peut être réparti sur plusieurs noms d'hôte.
Auparavant (HTTP 1.0 et antérieur), chaque nom d'hôte que le serveur souhaitait gérer différemment devait avoir sa propre adresse IP. C'était plutôt inutile.
HTTP 1.1 ajoutait l'en-
Host
tête "en tant que champ obligatoire dans la requête HTTP (IIRC, certains fournisseurs l'avaient précédemment prise en charge en tant qu'extension). Cela indiquait au serveur quel nom d'hôte avait été demandé et l'autorisait donc à servir un contenu différent pour différents noms d'hôte sur le même serveur. Adresse IP: la prise en charge de HTTP 1.1 par les clients est désormais omniprésente.Malheureusement, SSL (plus tard TLS) a ajouté une ride. Pour établir une session SSL / TLS, le serveur doit présenter au client un certificat couvrant le nom d'hôte demandé, mais la demande HTTP n'arrive qu'après que la session SSL / TLS ait été établie.
Il est possible de faire en sorte qu'un seul certificat couvre plusieurs noms d'hôte via l'utilisation du
SubjectAltName
champ ou l'utilisation de caractères génériques dans leCommonName
champ. Toutefois, cela pose des problèmes d’administration, en particulier si les noms d’hôte impliqués appartiennent à des domaines avec des propriétaires différents.TLS a donc introduit l’extension "SNI" (Server Name Indication). Avec cette extension, le client envoie le nom d'hôte demandé au serveur au cours de la procédure de négociation TLS. Le serveur peut alors présenter le certificat approprié. Malheureusement, bien que les versions actuelles de toutes les principales implémentations SSL / TLS prennent en charge SNI, il a fallu beaucoup de temps pour que les anciennes versions tombent en panne.
la source
La réponse est un peu plus compliquée que certaines des réponses ne le prétendent. Lorsque vous effectuez une recherche DNS, vous DEVEZ obtenir une adresse IP (
A
enregistrez pour IPv4,AAAA
pour IPv6). Vous devez être capable d'ouvrir un socket sur TCP / IP pour communiquer ou tout échoue. Cette adresse peut représenter un serveur ou un équilibreur de charge. Cela pourrait même représenter un proxy. Si l'hôte est derrière CloudFlare, par exemple, l'adresse que vous obtenez est celle d'un serveur CloudFlare. Le vrai serveur est ailleurs. Cela permet à l'hôte d'éviter des problèmes tels que les attaques par déni de service.L'hébergement virtuel est ce que vous demandez (certaines des questions ont abordé ce sujet, mais pas en détail). L'hébergement virtuel prend la demande Web et examine le nom d'hôte (c'est-à-dire, domain.com) pour déterminer le site Web à desservir. Donc, dans le serveur Web HTTP Apache, vous auriez une configuration comme celle-ci.
Ceci est simplifié par exemple. Nous demandons donc à Apache d'écouter sur le port 80 de n'importe quelle adresse IP (sur une machine virtuelle moderne hébergeant l'adresse IP de votre machine, celle-ci peut être différente de son adresse IP réelle). Nous lui disons ensuite qu'il s'agit du
domain.com
site Web et de l'annuaire sous lequel ce site vit. Nous pouvons ensuite répéter ce blocage encore et encore pour dire à Apache de gérer différents sites Web. Chaque serveur Web prend en charge ce type de système.Une autre solution consiste à indiquer au serveur Web de diriger tout le trafic Web vers un seul script de programmation (PHP, ASP.NET, etc.), puis ce script déterminera le site Web et la page à afficher.
la source
En utilisant DNS, vous pouvez attribuer autant de noms que vous le souhaitez à une adresse IP individuelle (dans votre fichier hosts, vous pouvez simplement séparer chaque nom par des espaces, par exemple). À l'aide d'un serveur DNS, vous pouvez également attribuer plusieurs adresses IP à un seul nom . Cela ne se limite pas à une relation un à un.
Un serveur Web sait quel site servir en examinant l'URL demandée. Il regarde quel domaine a été demandé, le port qui a été demandé et quel protocole a été utilisé. Cela n'a rien à voir avec DNS et est géré par le protocole HTTP.
la source
Le serveur Web utilise le concept de conteneur hôte ( voici la documentation de Tomcat, par exemple). Plusieurs conteneurs hôtes peuvent être configurés pour la même boîte / adresse IP, desservant plusieurs domaines. Les conteneurs ont des répertoires de travail indépendants, des domaines d'authentification, des répertoires de journalisation, etc.
Le serveur trouve le conteneur approprié pour la nouvelle requête. Le nom du domaine fait partie de cette requête HTTP.
Des instances de serveur Web complètement différentes peuvent partager la même adresse IP si elles s'exécutent sur des ports différents. Ceci est principalement utilisé dans divers environnements de développement et de test où les noms de domaine peuvent ne pas être disponibles, car le serveur de production ne peut pas s'exécuter sur un port arbitraire.
Enfin, même si l'adresse IP strictement unique est requise pour un site Web, un serveur possède souvent plusieurs cartes réseau et est donc configuré pour utiliser plusieurs adresses IP.
la source
L'adresse IP de votre serveur peut contenir plusieurs noms de domaine différents en même temps.
Lorsque vous accédez au site Web, votre navigateur envoie la requête HTTP contenant le nom de domaine. Le serveur peut alors identifier les données de site Web qu’il doit vous renvoyer.
C'est ce qu'on appelle les hôtes virtuels, si simple que ça :)
Jetez un coup d'oeil ici pour plus d'informations sur le DNS et les hôtes virtuels.
la source