Perché digitare un indirizzo IP anziché il nome di dominio corrispondente non mostra il sito Web? [chiuso]


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

Scrivo 93.184.216.34invece che http://example.comin Chrome. Non carica il sito Web. Perché?


Come regola generale, gli umani non dovrebbero mai usare gli indirizzi IP, a meno che non si configuri un server reale.
David Richerby,

Vale la pena sottolineare che ha fatto ottenere una risposta dal server: una risposta 404 HTTP. Ciò significa che ha trovato correttamente l'host (il computer dall'altra parte) e alcuni server Web (immagino che qualcosa di open source in esecuzione su Linux, come Nginx) in esecuzione su quell'host abbia inviato indietro i dati.
jpmc26,

Risposte:


107

Perché Hostspesso è necessaria la corretta intestazione HTTP per ottenere effettivamente il sito desiderato.

È molto comune ospitare più siti Web sullo stesso indirizzo IP e distinguerli in base all'intestazione HTTP Hostspecificata dal client (nonché al valore SNS TLS al giorno d'oggi nel caso di HTTPS).

Cioè, quando hai inserito http://example.comnel tuo browser l' Hostintestazione era example.com, ma non è il caso quando hai inserito 93.184.216.34. Raggiungi lo stesso server Web in entrambi i casi, ma ricevi risposte diverse (in questo caso particolare 200 vs. 404).


4
Qualcuno potrebbe espandersi un po 'su cosa Hostfa e per quali server web generalmente lo usa? È un po 'difficile cercare online perché quella parola è così sovraccarica.
user1717828,

1
tools.ietf.org/html/rfc7230#section-5.4 Un server http elabora un'intestazione Host come desidera. httpd ad esempio ha le direttive di configurazione di VirtualHost.
John Mahowald,

19
@SergiyKolodyazhnyy Certo. Potresti curl -H "Host: example.com" http://93.184.216.34/o qualcosa del genere.
Håkan Lindqvist,

13
Per parafrasare: "non esiste una relazione uno a uno tra URL per siti Web e indirizzo IP".
Pete,

1
In effetti quel particolare server (93.184.216.34 2606: 2800: 220: 1: 248: 1893: 25c8: 1946) gestisce almeno example.com example.net example.org example.edu gli stessi indirizzi, motivo per cui ha davvero bisogno del nome nell'intestazione Host.
dave_thompson_085,

14

Perché di solito i server Web utilizzano la tecnologia "server virtuale" e sono in grado di rispondere alla richiesta HTTP all'interno esattamente del nome di dominio richiesto, ma non dell'indirizzo IP dei server Web. Grazie a nascondere più di un nome di dominio su un indirizzo IP.

Ad esempio, il web server Apache è in grado di rispondere alla tua richiesta HTTP con un indirizzo IP usando la sezione:

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

o se nessun VirtualHost è stato usato nella configurazione.

La funzione VirtualHost in Apache è stata introdotta nel 1996.


10

In Apache , puoi ospitare molti siti Web utilizzando un solo indirizzo IP. Questo si chiama hosting virtuale. È così che possono essere creati sottodomini, anche domini autonomi. Ciò avviene impostando un file di configurazione Apache contenente le direttive VirtualHost per ciascun dominio / sottodominio.

Un server HTTP di esempio che ha due host virtuali, example1.com ed example2.com può apparire così (definizione dell'indirizzo 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>

Può anche assomigliare a questo (definizione basata sul nome):

<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>

In entrambi i casi, due record di host virtuali vengono creati internamente in memoria e utilizzati da Apache per confrontare quando arriva una richiesta URI.

Quando un utente digita l'indirizzo IP tramite un agente utente, il primo host virtuale elencato nel file di configurazione viene utilizzato come dominio primario (ovvero, in questo caso esempio1.com).

Quando un utente digita un nome di dominio, la richiesta viene inviata a una rete DNS Internet pubblica (ICANN) che fornisce l'indirizzo IP ad esso associato. Ti sei registrato entrambi tramite un registrar ICANN (come GoDaddy). È necessario disporre di entrambi questi elementi corretti e attendere un po 'di tempo prima che la propagazione si impadronisca di tutti i server DNS sulla rete ICANN. In questi giorni possono essere necessarie fino a 24 ore.

Quando la richiesta viene instradata al tuo server HTTP Apache, l'indirizzo IP e il nome del dominio vengono confrontati con l'elenco dei record interni di VirtualHost. Quando ne viene trovato uno, la radice del documento viene utilizzata per formare il percorso completo del filesystem della risorsa oggetto per tornare all'agente utente. In caso contrario, viene inviato un HTTP 404 insieme a qualsiasi documento di errore ad esso associato.


8

Mi piace usare la terminologia "casa".

Puoi facilmente inviare una lettera a una casa senza un nome e arriverà a casa.

Se inserisci il nome della persona su di esso, stai inviando al destinatario previsto.

La destinazione è la stessa, ma come viene gestita quando raggiunge la casa è diversa.

Quando si specifica il sito, ad es. Www.example.com, il server sa come gestire la richiesta e per quale host è previsto e per quale sito restituire.


Questa è una metafora utile!
Programmi di Redwolf il

+1 Mi piace l'idea del nome del destinatario. Stavo pensando a un'analogia simile ma con l'indirizzo IP che identifica l'edificio fisico (computer) ma il numero dell'appartamento (nome di dominio) che identifica il destinatario effettivo negli edifici multi-tenant. Naturalmente, si tratta di una semplificazione eccessiva e i computer multi-tenant potrebbero avere il server di indirizzi IP solo un sito predefinito, ma penso che questa sia una buona analogia.
jmbertucci,

0

Il termine chiave da cercare è "hosting virtuale basato sul nome".

Le persone vogliono allocare più nomi host sullo stesso server Web e servire contenuti diversi per ciascun nome host. Questo è noto come hosting virtuale (da non confondere con il concetto più recente di macchine virtuali).

Inizialmente l'hosting virtuale è stato realizzato assegnando più indirizzi IP al server, il server ha potuto quindi inviare contenuti diversi in base all'indirizzo IP utilizzato, ma questo è stato visto come uno spreco.

Pertanto, l'intestazione "host" è stata introdotta, inizialmente come estensione, ma successivamente ha fatto parte obbligatoria della specifica http 1.1 nel 1997. Questa intestazione specifica il nome host richiesto dal client. Il server può quindi offrire contenuti diversi in base al valore dell'intestazione.


"ma questo è stato visto come uno spreco." Solo per connessioni legacy v4. Ora è abbastanza possibile configurare ogni host virtuale su un indirizzo v6 diverso.
Qwertie,

1
Siamo ancora molto lontani dal punto in cui rendere i vostri servizi pubblici solo IPv6 è una cosa ragionevole da fare.
Peter Green,

0

Per contenere i costi dei server Web, molti server Web ospitano più siti Web. Lo fanno usando host virtuali, o Vhosts, in apache2 / nginx / etc. Quindi, se vai direttamente all'indirizzo IP del sito Web, molto probabilmente otterrai una schermata "Apache funziona" o forse verrai reindirizzato al sito Web principale del server web.

Un Vhost esamina l'indirizzo del sito Web in arrivo e lo confronta con i nomi ServerName o ServerAlias ​​nei file Vhosts abilitati. Se uno di questi corrisponde, viene caricato quel sito Web specifico.

A meno che il sito Web non abbia un carico enorme (un numero elevato di visitatori unici / visualizzazioni di pagina) o supporti applicazioni ad alto carico (pensate a youtube.com, Facebook, ecc.), È probabilmente più conveniente operare su un server condiviso. Sarebbe uno spreco di denaro procurarsi un server dedicato (a partire da $ 60 / mese) solo per eseguire un sito Web di blog Wordpress. È meglio ottenere una piattaforma condivisa su un server con probabilmente più di 200 siti Web su un server. I costi saranno più nella zona di $ 5 / mese.

Un altro motivo per farlo è la mancanza di indirizzi IP. Semplicemente non ci sono abbastanza indirizzi IPv4 rimanenti. È solo attraverso l'uso di NAT per le reti domestiche / aziendali e l'uso di Vhosts che possiamo rimanere. Anche quando IPv6 diventa flusso principale, i server probabilmente aderiranno a Vhosts (costi del server).


0

Un indirizzo IP dedicato è costoso, mentre la creazione di un nuovo sito Web su un server è sostanzialmente gratuita.

Quello che succede è che la società di hosting noleggia un singolo indirizzo IP che punta a un server fisico, quindi ospita migliaia di siti Web su quell'indirizzo IP utilizzando la funzione "host virtuale"

Pensa come una casella postale, se scrivi semplicemente l'indirizzo dell'ufficio postale ma senza il numero di casella, la posta non verrà recapitata.


0

Ci sono molte risposte qui con i dettagli tecnici, ma penso che la spiegazione di alto livello più semplice sia che anche se un server web sta ascoltando correttamente il traffico http sul suo indirizzo IP, il server deve solito essere configurato per rispondere a un determinato dominio nome e tale nome deve essere nella richiesta inviata dal client (ovvero il browser Web)

Dico "di solito" perché è quasi sempre fatto in questo modo, ma in realtà ci sono metodi in cui è possibile configurare il server http per rispondere se viene utilizzato solo l'indirizzo IP.


-1

Dobbiamo comprendere le differenze tra IP virtuali e IP dedicati.

Se un sito Web ha un IP dedicato (non condiviso), quindi (ad esempio) http://123.456.789.012 visualizzerà il sito Web.

Prova questo, che è l'indirizzo IP dedicato di un sito che possiedo, www.negativeiongenerators.com: http://75.126.128.174 Ma come altri hanno già detto, di solito non è una buona idea.


1
Questo non è universalmente vero. Dipende dalla configurazione del web server. Puoi avere un indirizzo IP dedicato e non rispondere ancora all'IP senza l'host e puoi anche avere un indirizzo IP condiviso e avere l'indirizzo IP puntato a uno dei siti Web sul server. Non c'è nulla di sbagliato nel consentire l'accesso a un sito Web solo tramite il suo indirizzo IP, anche se non è particolarmente utile.
Qwertie,
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.