web-dev-qa-db-fra.com

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

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? Je vous remercie.

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

27
johnny

Cela fait partie du protocole HTTP 1.1.

Plus précisément, le protocole HTTP 1.1 comprend un en-tête appelé "Host:" 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 du contenu à partir de http://snoopy.net/doghouse la demande http spécifique ressemblerait à:

GET /doghouse HTTP/1.1
Host: snoopy.net

Si l'URL souhaitée est http://woodstock.org/seeds la 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.


éditer

** 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 , donc must est un peu trop fort.

36
chris

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ôte: superuser.com 
 Agent utilisateur: 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


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

12
John Gietzen

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 auquel les demandes sont destinées, ce qui permet au serveur Web de faire correspondre la demande avec un domaine virtuel particulier.

Si vous disposez de plusieurs hôtes physiques en interne avec une seule adresse IP externe, vous devrez examiner la configuration proxy inverse pour transférer les demandes vers la machine/l'adresse IP interne correcte.

6
3dinfluence

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.

par exemple 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 pourriez trouver que ServeFault est un meilleur endroit pour cette question.

3
Colin Newell

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.

1
Garry

Si je lis bien votre question, vous avez deux ordinateurs différents partageant une adresse IP via NAT (traduction d'adresse réseau)? Si oui, 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 demandes à différents ordinateurs en fonction des métadonnées HTTP "Host". Vous feriez mieux d'obtenir une deuxième adresse IP pour votre deuxième serveur.

0
CarlF

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 transfère les demandes à différents serveurs de votre réseau interne en fonction des en-têtes de l'hôte. Je suis à peu près sûr que b) est possible, mais je n'ai aucune idée réelle de son fonctionnement, vous devrez donc demander à quelqu'un d'autre si c'est ce que vous essayez de faire.

0
Catherine MacInnes