Comment avez-vous une adresse IP et plusieurs sites Web?

27

Comment puis-je l'avoir là où j'ai une adresse IP qui se trouve sur Internet mais plusieurs noms de sites Web? Par exemple, lorsqu'une société d'hébergement a une IP partagée mais que j'obtiens des noms de domaine illimités (avec tous les autres sur cette case).

J'ai une boîte sur Internet, mais je veux pointer vers une autre machine qui détient un site Web différent lorsque quelqu'un tape dans les différents www ... (il est assis juste à côté dans une boîte différente). Est-ce que tout ce sous-domaine? Merci.

Je suis la société d'hébergement

johnny
la source

Réponses:

36

Cela fait partie du protocole HTTP 1.1.

Plus précisément, le protocole HTTP 1.1 comprend un en-tête appelé «hôte:» qui spécifie à quel site Web sur un serveur particulier le client tente d'accéder.

Donc, si snoopy.net et woodstock.org partagent tous les deux 192.0.32.10 et que votre navigateur essaie d'obtenir le contenu de http://snoopy.net/doghouse la requête http spécifique, cela ressemblerait à:

GET /doghouse HTTP/1.1
Host: snoopy.net

Si l'URL souhaitée est http://woodstock.org/seedsla demande ressemblerait à

GET /seeds HTTP/1.1
Host: woodstock.org

Dans les deux cas, il y aurait un socket TCP entre votre ordinateur et le port 80 du serveur. Le serveur saurait obtenir le contenu de /var/www/snoopy.net ou /var/www/woodstock.org/ en fonction de l'en-tête Host.

Il y aurait d'autres en-têtes pour les cookies et d'autres choses comme le type de navigateur et le contenu autorisé, mais l'en-tête "Host" est précisément ce qui permet au serveur Web de savoir quel site Web virtuel est souhaité.

Il y a plus dans le RFC2616 .

C'est aussi pourquoi les sites https * doivent *** avoir leur propre adresse IP - l'échange de clés ssl et la vérification des certificats ont lieu avant la transaction http, donc le serveur http ne saura pas donner le certificat pour "woodstock". org "ou" snoopy.net "lorsqu'il reçoit une connexion https sur le port 443 de 192.0.32.10.


modifier

** dans les commentaires, Grawity souligne qu'il existe des extensions SSL dans la spécification TLS qui permettent au serveur de savoir à quel site Web l'utilisateur tente d'accéder, et que la plupart des navigateurs Web modernes ont ces extensions, il en va de même un peu trop fort.

chris
la source
de sorte que le serveur Web verrait cet en-tête et le déplacerait vers le site Web correct? Pouvez-vous avoir plusieurs sites Web sur le même port comme ça?
johnny
1
C'est exactement pour ça. Un "serveur" tel qu'apache, a le port 80 de 192.0.32.10 qui a de nombreuses entrées DNS, chacune étant un "site". Le serveur sait ce que le site souhaité est basé sur l'en-tête "hôte".
chris
3
Le DNS est configuré pour que les deux noms pointent vers la même adresse IP, où le serveur écoute. Le serveur reçoit des connexions sur la même IP et le même port, mais ensuite, lorsque le navigateur lui dit "Je veux SiteA.com", il sait qu'il doit fournir un contenu différent de celui demandé sur SiteB.com.
Massimo
2
Pour être encore plus clair: les deux sites se distinguent au niveau du protocole HTTP, pas au niveau TCP / IP. C'est comme quand quelqu'un téléphone à votre bureau et demande à parler à John ou Susan: le numéro de téléphone est le même, mais plus d'une personne peut l'utiliser.
Massimo
1
La plupart des navigateurs et serveurs Web prennent désormais en charge l'indication de nom de serveur TLS, ce qui supprime l'exigence d'une adresse IP par site Web.
grawity
12

Il y a quelque chose que tous les navigateurs modernes envoient avec la demande, appelé l'en-tête "Host:".

La demande réelle que Firefox envoie pour cette page est:

Hébergeur: superuser.com
User-Agent: Mozilla / 5.0 (Windows; U; Windows NT 6.0; en-US; rv: 1.9.1.7) Gecko / 20091221 Firefox / 3.5.7 (.NET CLR 3.5.30729)
Accepter: texte / html, application / xhtml + xml, application / xml; q = 0,9, * / *; q = 0,8
Accept-Language: en-us, en; q = 0,5
Accept-Encoding: gzip, dégonfler
Accept-Charset: ISO-8859-1, utf-8; q = 0,7, *; q = 0,7
Keep-Alive: 300
Connexion: garder en vie

Comme vous pouvez le voir,

Hébergeur: superuser.com
bit identifie le site Web en question.

Dans IIS et Apache, vous pouvez configurer des sites Web virtuels qui n'acceptent que les demandes d'une combinaison IP / hôte spécifique.

En ce qui concerne votre problème particulier, vous devrez lire comment votre hébergeur particulier souhaite que vous demandiez la configuration.

John Gietzen
la source
Cela devrait également mentionner que vous devez définir plusieurs entrées DNS pour votre adresse IP.
Tadeusz A. Kadłubowski
@Tadeusz: Il est possible de configurer des entrées DNS génériques, ce n'est donc pas strictement nécessaire.
John Gietzen
6

La technique pour héberger plus d'un domaine / sous-domaine sur une seule adresse IP / hôte est appelée hôtes virtuels . La demande http get contient le nom de domaine pour lequel les demandes sont destinées, ce qui permet au serveur Web de faire correspondre la demande avec un domaine virtuel particulier.

Si vous avez plusieurs hôtes physiques en interne avec une seule adresse IP externe, vous voudrez peut-être envisager de configurer un proxy inverse pour transférer les demandes vers la machine / l'adresse IP interne correcte.

3dinfluence
la source
ou vous pouvez également utiliser d'autres serveurs http sur différents ports.
Chopper3
Oui, c'est également une option. Mais les gens ne sont pas habitués à devoir spécifier un port lorsqu'ils saisissent une URL, je réserve donc cette solution à quelques situations telles qu'une interface d'administration.
3dinfluence
3

La fonctionnalité de votre serveur Web est normalement appelée «hôtes virtuels». Une fois que vous pointez les entrées DNS pour pointer vers cette adresse IP (comme mentionné dans les autres réponses), le serveur servira alors les différents sites en fonction de l'hôte demandé.

Pour ce qui est de pointer vers une autre case. Vous pouvez configurer des redirections dans la plupart des serveurs Web si vous vous attendez à obtenir la requête en premier. Si vous parlez de sous-domaines, il vous suffit de pointer chacun des sous-domaines vers une adresse IP différente.

ie host.com -> IP 1 puis www.host.com -> IP 2 et mail.host.com -> IP 3

Si vous voulez des réponses plus spécifiques, vous devez dire quel logiciel de serveur Web sur quel système d'exploitation vous utilisez.

Vous trouverez peut-être que ServeFault est un meilleur endroit pour cette question.

Colin Newell
la source
1

En bref...

Un - Définissez les entrées DNS de vos différents domaines pour qu'elles pointent toutes vers votre box.

Deux - Comme décrit par d'autres, configurez votre serveur Web (vous ne dites pas lequel) pour correspondre au nom d'hôte demandé.

De cette façon, toutes les demandes pour tous vos domaines vont sur la même machine et sa configuration prend le domaine demandé et l'achemine vers le bon dossier contenant le contenu de ce site.

Garry
la source
0

Il me semble de votre question que vous avez un serveur physique séparé pour le deuxième site Web. Dans ce cas, vous ne pourrez pas utiliser une seule adresse IP pour les deux serveurs. Vous pouvez soit a) obtenir une deuxième adresse IP publique pour votre deuxième hôte ou b) configurer un proxy intelligent qui transmet les demandes à différents serveurs de votre réseau interne en fonction des en-têtes d'hôte. Je suis à peu près sûr que b) est possible mais je n'ai aucune idée de comment cela fonctionne, vous devrez donc demander à quelqu'un d'autre si c'est ce que vous essayez de faire.

Catherine MacInnes
la source
0

Si je lis bien votre question, vous avez deux ordinateurs différents partageant une adresse IP via NAT (Network Address Translation)? Si c'est le cas, vous devrez avoir un site à écouter sur un port différent (pas 80) - il n'y a pas de bon moyen que je sache pour que le routeur envoie des requêtes à différents ordinateurs en fonction des métadonnées HTTP "Host". Il vaut mieux obtenir une deuxième adresse IP pour votre deuxième serveur.

CarlF
la source