Pourquoi la saisie d'une adresse IP au lieu du nom de domaine correspondant n'affiche-t-elle pas le site Web? [fermé]

38
> host example.com
example.com has address 93.184.216.34
example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946

Je tape 93.184.216.34au lieu de http://example.comdans Chrome. Cela ne charge pas le site. Pourquoi?

PerrierCitror
la source
En règle générale, les utilisateurs ne doivent jamais utiliser d’adresses IP, à moins de configurer un serveur réel.
David Richerby
Convient de souligner que vous avez fait obtenir une réponse du serveur: une réponse HTTP 404. Cela signifie qu'il a correctement trouvé l'hôte (l'ordinateur de l'autre côté) et un serveur Web (je suppose que quelque chose d'open source fonctionnant sous Linux, comme Nginx) s'exécutant sur cet hôte renvoyait des données.
jpmc26

Réponses:

107

Parce que le bon en- Hosttête HTTP est souvent nécessaire pour obtenir le site prévu.

Il est très courant d'héberger plusieurs sites Web sur la même adresse IP et de les distinguer en fonction de l'en- Hosttête HTTP spécifié par le client (ainsi que de la valeur TLS SNI de nos jours dans le cas du protocole HTTPS).

C'est-à-dire que lorsque vous avez entré http://example.comvotre navigateur, l'en- Hosttête était example.com, mais ce n'est pas le cas lorsque vous l'avez entré 93.184.216.34. Vous atteignez le même serveur Web dans les deux cas, mais vous recevez des réponses différentes (dans ce cas particulier, 200 contre 404).

Håkan Lindqvist
la source
4
Quelqu'un pourrait-il expliquer un peu plus sur quoi Hostet quels serveurs web l'utilisent généralement? C'est un peu difficile de chercher en ligne parce que ce mot est tellement surchargé.
user1717828
1
tools.ietf.org/html/rfc7230#section-5.4 Un serveur http traite un en-tête d'hôte comme il le souhaite. httpd, par exemple, a des directives de configuration VirtualHost.
John Mahowald
19
@SergiyKolodyazhnyy Bien sûr. Vous pourriez curl -H "Host: example.com" http://93.184.216.34/ou quelque chose comme ça.
Håkan Lindqvist
13
Pour paraphraser - "il n'y a pas de relation un-à-un entre les URL des sites Web et les adresses IP".
Pete
1
En fait, ce serveur particulier (93.184.216.34 2606: 2800: 220: 1: 248: 1893: 25c8: 1946) gère au moins example.com example.net example.org example.edu la même adresse (s), raison pour laquelle il a vraiment besoin du nom dans l'en-tête Host.
dave_thompson_085
14

Parce que les serveurs Web utilisent généralement la technologie de "serveur virtuel" et sont capables de répondre à votre demande HTTP avec exactement le nom de domaine que vous demandez, mais pas l'adresse IP des serveurs Web. Merci de cacher plus d’un nom de domaine sur une adresse IP.

Par exemple, le serveur Web Apache est en mesure de répondre à votre requête HTTP avec une adresse IP en utilisant la section:

<VirtualHost *:80>
ServerName Default
...
</VirtualHost>

ou si aucun hôte virtuel utilisé dans la configuration.

La fonctionnalité VirtualHost dans Apache a été introduite en 1996.

Алексей Лебедев
la source
10

Dans Apache , vous pouvez héberger de nombreux sites Web en utilisant une seule adresse IP. Ceci s'appelle l'hébergement virtuel. C'est comment les sous-domaines peuvent être créés, même les domaines autonomes. Cela se fait en configurant un fichier de configuration Apache contenant les directives VirtualHost pour chaque domaine / sous-domaine.

Un exemple de serveur HTTP comportant deux hôtes virtuels, exemple1.com et exemple2.com, peut ressembler à ceci (définition de l'adresse IP):

<VirtualHost 93.184.216.34:80>
  ServerName example1.com
  ServerAlias www.example1.com
  DocumentRoot /var/www/example1.com
</VirtualHost>

<VirtualHost 93.184.216.34:80>
  ServerName example2.com
  ServerAlias www.example2.com
  DocumentRoot /var/www/example2.com
</VirtualHost>

Cela peut aussi ressembler à ceci (définition basée sur le nom):

<VirtualHost *:80>
  ServerName example1.com
  ServerAlias www.example1.com
  DocumentRoot /var/www/example1.com
</VirtualHost>

<VirtualHost *:80>
  ServerName example2.com
  ServerAlias www.example2.com
  DocumentRoot /var/www/example2.com
</VirtualHost>

Dans les deux cas, deux enregistrements d’hôte virtuel sont créés en interne dans la mémoire et utilisés par Apache pour la comparaison lorsqu’une demande URI est reçue.

Lorsqu'un utilisateur tape l'adresse IP via un agent d'utilisateur, le premier hôte virtuel répertorié dans le fichier de configuration est utilisé comme domaine principal (c'est-à-dire, dans l'exemple, exemple1.com).

Lorsqu'un utilisateur tape un nom de domaine, la demande est envoyée à un réseau public Internet DNS (ICANN) qui fournit l'adresse IP qui lui est associée. Vous avez enregistré les deux via un bureau d'enregistrement ICANN (comme GoDaddy). Vous devez avoir les deux corrects et donner un peu de temps avant que la propagation ne s'empare de tous les serveurs DNS du réseau ICANN. Ces jours, cela peut prendre jusqu'à 24 heures.

Lorsque la demande est routée vers votre serveur HTTP Apache, l'adresse IP et le nom de domaine sont comparés à la liste des enregistrements internes de VirtualHost. Lorsqu'il en trouve un, la racine du document est utilisée pour former le chemin d'accès complet du système de fichiers à la ressource objet, afin de le renvoyer à l'agent utilisateur. Dans le cas contraire, un HTTP 404 est envoyé avec tout document d'erreur associé.

Kerry Kobashi
la source
8

J'aime utiliser la terminologie "maison".

Vous pouvez très facilement envoyer une lettre à une maison sans nom et elle arrivera à la maison.

Si vous mettez le nom de la personne dessus, vous l'enverrez au destinataire.

La destination est la même, mais la façon dont elle est gérée lorsqu'elle atteint la maison est différente.

Lorsque vous spécifiez le site, c'est-à-dire www.example.com, le serveur sait comment traiter la demande, son hôte et le site à desservir.

Chris Lomax
la source
C'est une métaphore utile!
Programmes Redwolf
+1 J'aime l'idée du nom du destinataire. Je pensais à une analogie similaire, mais avec une adresse IP identifiant le bâtiment physique (ordinateur) mais le numéro d'appartement (nom de domaine) identifiant le destinataire réel dans des bâtiments à plusieurs locataires. Bien sûr, il s’agit d’une simplification excessive et les ordinateurs à locataires multiples pourraient avoir un site par défaut pour le serveur d’adresses IP, mais je pense que c’est une bonne analogie.
Jmbertucci
0

Le terme clé à rechercher est "hébergement virtuel basé sur le nom".

Les utilisateurs souhaitent attribuer plusieurs noms d’hôte au même serveur Web et diffuser un contenu différent pour chaque nom d’hôte. C'est ce qu'on appelle l'hébergement virtuel (à ne pas confondre avec le concept plus récent de machines virtuelles).

Initialement, l'hébergement virtuel était réalisé en attribuant plusieurs adresses IP au serveur. Le serveur pouvait alors envoyer un contenu différent en fonction de l'adresse IP utilisée, mais cela était considéré comme une perte de temps.

Par conséquent, l'en-tête "host" a été introduit, initialement en tant qu'extension, puis a ensuite été rendu obligatoire en 1997 par la spécification http 1.1. Cet en-tête spécifie le nom d'hôte demandé par le client. Le serveur peut alors diffuser un contenu différent en fonction de la valeur de l'en-tête.

Peter Green
la source
"mais cela a été considéré comme un gaspillage." Seulement pour les anciennes connexions v4. Il est maintenant tout à fait possible de configurer chaque hôte virtuel sur une adresse v6 différente.
Qwertie
1
Nous sommes encore loin du point où rendre vos services uniquement publics IPv6 est une chose raisonnable à faire.
Peter Green
0

Pour réduire les coûts des serveurs Web, de nombreux serveurs Web hébergent plusieurs sites Web. Ils le font en utilisant des hôtes virtuels, ou Vhosts, dans apache2 / nginx / etc. Ainsi, si vous accédez directement à l'adresse IP du site Web, vous obtiendrez probablement un écran "Apache fonctionne", voire éventuellement une redirection vers le site Web principal du serveur Web.

Un Vhost examine l'adresse du site Web entrant et la compare aux noms ServerName ou ServerAlias ​​dans les fichiers Vhosts activés. Si l'un d'eux correspond, ce site Web spécifique est chargé.

Si le site Web ne supporte pas une charge considérable (nombre élevé de visiteurs uniques / pages vues) ou ne génère pas d'applications très chargées (pensez à youtube.com, Facebook, etc.), il est probablement plus rentable de fonctionner sur un serveur partagé. Ce serait un gaspillage d'argent de vous procurer un serveur dédié (à partir de 60 $ / mois) juste pour gérer un site Web de blog Wordpress. Vous feriez mieux d'avoir une plate-forme partagée sur un serveur avec probablement plus de 200 sites Web sur un serveur. Les coûts seront plus de l'ordre de 5 $ / mois.

Une autre raison est l'absence d'adresses IP. Il n’ya tout simplement pas assez d’adresses IPv4 restantes. Ce n’est que par l’utilisation du NAT pour les réseaux privés / professionnels et l’utilisation de Vhosts. Même lorsque IPv6 devient le flux principal, les serveurs resteront probablement sur Vhosts (coûts de serveur).

Joseph Williams
la source
0

Une adresse IP dédiée coûte cher, tandis que la création d'un nouveau site Web sur un serveur est fondamentalement gratuite.

En fait, la société d'hébergement loue une adresse IP unique qui pointe vers un serveur physique, puis héberge des milliers de sites Web sur cette adresse IP à l'aide de la fonction "hôte virtuel".

Pensez comme une boîte postale. Si vous écrivez simplement l'adresse du bureau de poste mais sans le numéro de boîte postale, le courrier ne sera pas livré.

Magnetic_dud
la source
0

Il y a beaucoup de réponses ici avec les détails techniques, mais je pense que la simple explication de haut niveau est que même si un serveur Web est correctement écoute pour trafic http sur l' adresse IP de lui, le serveur doit généralement être également configuré pour répondre à un domaine particulier nom, et ce nom doit figurer dans la demande envoyée par le client (c'est-à-dire le navigateur Web)

Je dis «généralement» parce que c'est presque toujours ainsi, mais il existe en fait des méthodes permettant de configurer le serveur http pour qu'il réponde si seule l'adresse IP est utilisée.

Christopher Hunter
la source
-1

Nous devons comprendre les différences entre les adresses IP virtuelles et les adresses IP dédiées.

Si un site Web possède une adresse IP dédiée (non partagée), http://123.456.789.012 (par exemple) affichera le site Web.

Essayez ceci, qui est l'adresse IP dédiée d'un site que je possède, www.negativeiongenerators.com: http://75.126.128.174 Mais comme d'autres l'ont dit, ce n'est généralement pas une bonne idée.

Mike Waters
la source
1
Ce n'est pas universellement vrai. Cela dépend de la configuration du serveur Web. Vous pouvez avoir une adresse IP dédiée sans toujours répondre à l'IP sans l'hôte. Vous pouvez également avoir une adresse IP partagée et faire en sorte que l'adresse IP pointe vers l'un des sites Web du serveur. Il n'y a également rien de mal à autoriser l'accès à un site Web uniquement via son adresse IP, bien que cela ne soit pas particulièrement utile non plus.
Qwertie