Come hai un indirizzo IP e molti siti web?


27

Come posso averlo dove ho un indirizzo IP che si trova su Internet ma molti nomi web? Ad esempio, quando una società di hosting ha un IP condiviso ma ottengo nomi di dominio illimitati (insieme a tutti gli altri su quella casella).

Ho una scatola su Internet ma desidero indicare un'altra macchina che contiene un sito Web diverso quando qualcuno digita il diverso www ... (è seduto proprio accanto ad esso in una casella diversa). È tutto sottodominio? Grazie.

Sono la società di hosting

Risposte:


36

Fa parte del protocollo HTTP 1.1.

In particolare, il protocollo HTTP 1.1 include un'intestazione denominata "host:" che specifica a quale sito Web su un determinato server il client sta tentando di accedere.

Quindi, se snoopy.net e woodstock.org condividono entrambi 192.0.32.10 e il tuo browser sta provando a ottenere contenuti dalla http://snoopy.net/doghouse specifica richiesta http sarebbe simile:

GET /doghouse HTTP/1.1
Host: snoopy.net

Se l'URL desiderato è http://woodstock.org/seedsla richiesta sarebbe simile

GET /seeds HTTP/1.1
Host: woodstock.org

In entrambi i casi, ci sarebbe un socket tcp tra il computer e la porta 80 del server. Il server saprebbe ottenere contenuti da /var/www/snoopy.net o /var/www/woodstock.org/ in base all'intestazione Host.

Ci sarebbero altre intestazioni per i cookie e altre cose come il tipo di browser e il contenuto consentito, ma l'intestazione "Host" è specificamente ciò che consente al server Web di sapere quale sito Web virtuale è desiderato.

C'è di più nell'RFC2616 .

Questo è anche il motivo per cui i siti https * devono *** avere un proprio indirizzo IP: lo scambio di chiavi ssl e la verifica del certificato avvengono prima della transazione http, quindi il server http non saprà rilasciare il certificato per "woodstock. org "o" snoopy.net "quando riceve una connessione https sulla porta 443 di 192.0.32.10.


modificare

** nei commenti Grawity sottolinea che ci sono estensioni SSL nelle specifiche TLS che consentono al server di sapere a quale sito Web l'utente sta tentando di accedere e che la maggior parte dei browser Web moderni ha queste estensioni, quindi deve essere un po 'troppo forte.


quindi il server web vedrebbe quell'intestazione e la sposterà sul sito web corretto? Puoi avere più siti Web sulla stessa porta in quel modo?
johnny,

1
Questo è esattamente quello che serve. Un "server" come apache, ha la porta 80 di 192.0.32.10 che ha molte voci DNS, ognuna delle quali è un "sito". Il server sa quale sia il sito desiderato in base all'intestazione "host".
chris,

3
Il DNS è configurato per fare in modo che entrambi i nomi puntino allo stesso indirizzo IP, in cui il server è in ascolto. Il server riceve connessioni sullo stesso IP e porta, ma poi, quando il browser gli dice "Voglio SiteA.com", sa che deve distribuire un contenuto diverso rispetto a quando viene richiesto SiteB.com.
Massimo

2
Per essere ancora più chiari: i due siti si distinguono a livello di protocollo HTTP, non a livello TCP / IP. È come quando qualcuno telefona nel tuo ufficio e chiede di parlare con John o Susan: il numero di telefono è lo stesso, ma più di una persona può usarlo.
Massimo

1
La maggior parte dei browser e dei server Web ora supporta l'indicazione del nome del server TLS, che rimuove il requisito di un indirizzo IP per sito Web.
gravità

12

C'è qualcosa che tutti i browser moderni inviano insieme alla richiesta, chiamato intestazione "Host:".

La richiesta effettiva inviata da Firefox per questa pagina è:

Host: 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)
Accetta: text / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8
Accept-Language: en-us, en; q = 0,5
Accetta-codifica: gzip, deflate
Accept-Charset: ISO-8859-1, utf-8; q = 0,7, *; q = 0,7
Keep-Alive: 300
Connessione: keep-alive

Come puoi vedere, il

Host: superuser.com
bit identifica il sito Web in questione.

In IIS e Apache, è possibile configurare siti Web virtuali che accettano richieste solo da una combinazione IP / Host specifica.

Per quanto riguarda il tuo particolare problema, dovrai leggere in che modo la tua particolare società di hosting desidera che tu richieda la configurazione.


Ciò dovrebbe anche indicare che è necessario impostare più voci DNS per il proprio indirizzo IP.
Tadeusz A. Kadłubowski,

@Tadeusz: è possibile impostare voci DNS con caratteri jolly, quindi non è strettamente necessario.
John Gietzen,

6

La tecnica per ospitare più di un dominio / sottodominio su un singolo indirizzo IP / host è chiamata host virtuale . La richiesta http get contiene il nome di dominio per cui sono richieste le richieste che consente al server Web di abbinare la richiesta a un determinato dominio virtuale.

Se disponi di più host fisici internamente con un solo IP esterno, ti consigliamo di configurare il proxy inverso per inoltrare le richieste al computer / indirizzo IP interno corretti.


oppure potresti ovviamente anche altri server http su porte diverse.
Chopper3,

Sì, anche questa è un'opzione. Ma le persone non sono abituate a dover specificare una porta quando digitano un url, quindi riserverei quella soluzione ad alcune situazioni come un'interfaccia di amministrazione.
3dinfluenza

3

La funzione sul tuo server web è normalmente chiamata "host virtuali". Una volta puntate le voci DNS per puntare a quell'indirizzo IP (come menzionato nelle altre risposte), il server servererà quindi i diversi siti a seconda dell'host richiesto.

Per quanto riguarda l'indicazione di un'altra casella va. È possibile configurare i reindirizzamenti nella maggior parte dei server Web se si prevede di ottenere prima la query. Se stai parlando di sottodomini, tutto ciò che devi fare è indirizzare ciascuno dei sottodomini a un indirizzo IP diverso.

cioè host.com -> IP 1 quindi www.host.com -> IP 2 e mail.host.com -> IP 3

Se desideri risposte più specifiche, devi dire quale software del server Web su quale sistema operativo stai utilizzando.

Potresti scoprire che ServeFault è il posto migliore per questa domanda.


1

In breve...

Uno: imposta le voci DNS per i tuoi vari domini in modo che puntino tutte alla tua casella.

Due: come descritto da altri, imposta il tuo server web (non dici quale) corrispondere al nome host richiesto.

In questo modo tutte le richieste per tutti i tuoi domini vanno allo stesso computer e la sua configurazione prende il dominio richiesto e lo instrada nella cartella giusta contenente il contenuto di quel sito.


0

Mi sembra che tu abbia un server fisico separato per il secondo sito web. In tal caso, non sarà possibile utilizzare un singolo indirizzo IP per i due server. Puoi a) ottenere un secondo indirizzo IP pubblico per il tuo secondo host oppure b) configurare un proxy intelligente che inoltri le richieste a server diversi sulla tua rete interna in base alle intestazioni dell'host. Sono abbastanza sicuro che b) sia possibile ma non ho idea di come funzioni, quindi dovrai chiedere a qualcun altro se è quello che stai cercando di fare.


0

Se sto leggendo correttamente la tua domanda, hai due computer diversi che condividono un indirizzo IP tramite NAT (Network Address Translation)? In tal caso, dovrai avere un sito in ascolto su una porta diversa (non 80) - non ho modo di sapere che il router deve inviare richieste a computer diversi in base ai metadati HTTP "Host". Stai meglio solo per ottenere un secondo indirizzo IP per il tuo secondo server.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.