web-dev-qa-db-fra.com

Les serveurs possèdent-ils un seul site Web?

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?

79
user3407319

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:

  1. L'utilisateur fournit une URL, sous la forme http://Host:port/path.

  2. Le navigateur extrait la partie hôte (domaine) de l'URL et la traduit si nécessaire en adresse IP, selon un processus appelé résolution du nom. Cette traduction peut se faire via DNS, mais cela n’est pas obligatoire (par exemple, le fichier hosts local sur les systèmes d’exploitation courants contourne DNS).

  3. Le navigateur ouvre une connexion TCP vers le port spécifié ou par défaut sur le port 80 de cette adresse IP.

  4. Le navigateur envoie une requête HTTP. Pour HTTP/1.1, cela ressemble à ceci:

    GET /path HTTP/1.1
    Host: example.com
    

    (L'en-tête Host 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.

  • L'adresse IP demandée, à partir du TCP socket
    • L'adresse IP du client est également disponible, mais elle est rarement utilisée - parfois pour le blocage/filtrage
  • Le port demandé à partir du socket TCP
  • Le nom d'hôte demandé, tel que spécifié dans l'en-tête Host par le navigateur dans la requête HTTP.
  • Le chemin demandé
  • Tout autre en-tête (cookies, etc.)

Comme vous semblez l'avoir remarqué, la configuration d'hébergement mutualisé la plus commune de nos jours met plusieurs sites Web sur une seule adresse IP: combinaison de port, ne laissant que Host pour différencier les sites Web.

Ceci s'appelle un hôte virtuel nommé basé sur le nom dans Apache-land, tandis que Nginx les appelle Noms de serveur dans les blocs de serveurs et 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. Ceci 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 de toute façon.


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é pour fournir 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.

149
Bob

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

  • 404 Jill n'est pas là
  • 410 Jill est morte.
  • 301 Jill est emménagée avec Peter
  • 302 Jill rend visite à Peter, appelle-le à la place

  • 400 Je ne peux pas vous comprendre.

  • 401 Qui es-tu? Quel est le mot de passe? ou Nous n'autorisons pas les appelants après 22h
  • 402 Paiement requis (Êtes-vous sûr que Jill est son vrai nom ;-))
  • 403 Non, ce n'est pas le bon mot de passe.
  • 418 Jill est une théière :-)
  • 429 Jill ne peut plus prendre d'appels.
  • 451 Vous violez votre ordonnance d'interdiction.

  • 500 Notre système téléphonique est en panne.

92
Lenne

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?

Tout d'abord, vous devez comprendre qu'il existe un certain nombre de concepts distincts ici.

  • Site Web, groupe de pages Web formant un tout cohérent.
  • Adresse IP, adresse numérique (32 bits pour IPv4, 128 bits pour IPv6) utilisée par le protocole Internet comme source ou destination du trafic.
  • Serveur, une machine dont le travail consiste à répondre aux demandes des clients.
  • Nom d'hôte, nom utilisé pour identifier une machine dans le DNS (par exemple, "www.example.com" ou "en.wikipedia.org").

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.

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?

Auparavant (HTTP 1.0 et antérieur), chaque nom d'hôte que le serveur voulait gérer différemment devait avoir sa propre adresse IP. C'était plutôt inutile.

HTTP 1.1 a ajouté l'en-tête Host "en tant que champ obligatoire de la requête HTTP (certains fournisseurs l'avaient précédemment pris en charge par IIRC. Ceci indiquait au serveur quel nom d'hôte avait été demandé et lui permettait ainsi de servir un contenu différent pour différents noms même adresse IP. La prise en charge de HTTP 1.1 par les clients est maintenant 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 la création de la session SSL/TLS.

Il est possible de faire en sorte qu'un seul certificat couvre plusieurs noms d'hôte via l'utilisation du champ SubjectAltName ou l'utilisation de caractères génériques dans le champ CommonName. 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.

6
plugwash

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 (enregistrement A pour IPv4, AAAA pour IPv6). Vous devez être capable d'ouvrir un socket sur TCP/IP pour communiquer ou le 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.

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

<VirtualHost *:80>
    ServerName www.domain.com
    ServerAlias domain.com

    DocumentRoot /var/www/domain.com
</virtualHost>

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, elle peut être différente de son adresse IP réelle). Nous lui disons ensuite qu'il s'agit du site Web domain.com et du répertoire dans lequel ce site Web est hébergé. 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 unique déterminera le site Web et la page à afficher.

3
Machavity

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). En utilisant 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 utiliser 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.

1
krowe

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 DNS et les hôtes virtuels.

0
Tim Connor

Le serveur Web utilise le concept de conteneur d'hôte ( ici est la documentation de Tomcat, par exemple). Plusieurs conteneurs d'hôte peuvent être configurés pour la même adresse de boîte/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.

0
h22