> 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.34
invece che http://example.com
in Chrome. Non carica il sito Web. Perché?
> 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.34
invece che http://example.com
in Chrome. Non carica il sito Web. Perché?
Risposte:
Perché Host
spesso è 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 Host
specificata dal client (nonché al valore SNS TLS al giorno d'oggi nel caso di HTTPS).
Cioè, quando hai inserito http://example.com
nel tuo browser l' Host
intestazione 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).
Host
fa e per quali server web generalmente lo usa? È un po 'difficile cercare online perché quella parola è così sovraccarica.
curl -H "Host: example.com" http://93.184.216.34/
o qualcosa del genere.
example.com example.net example.org example.edu
gli stessi indirizzi, motivo per cui ha davvero bisogno del nome nell'intestazione Host.
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.
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.
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.
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.
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).
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.
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.
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.