Come andare a un sito Web su un server condiviso tramite il suo indirizzo IP?


18

Ho alcune domande, per favore aiutate:

Per prima cosa, posso accedere alla ricerca di Google semplicemente digitando http://74.125.224.211, perché questo è l'indirizzo IP restituito da nslookup.

Tuttavia, non ho potuto farlo con gli indirizzi IP restituiti da www.yahoo.com. Come posso accedere alla pagina di ricerca di Yahoo tramite il suo IP?

Un altro esempio, http://www.allaboutcircuits.comverrà risolto 68.233.243.63dal server DNS, ma se vado a http://68.233.243.63, ottengo "Ciao mondo!".

In secondo luogo, per qualche motivo, c'è qualcosa che non va nei risolutori DNS con il mio servizio di web hosting (non verrà risolto !!) . Quindi comandi come

get_file_contents("http://www.allaboutcircuits.com");

tornerà php_network_getaddresses: getaddrinfo failed: Name or service not known

Come aggirare questo problema con l'indirizzo IP,

68.233.243.63

Voglio dire, in qualche modo associare il parametro HTTP hostname a get_file_contents()?

Vorrei risolverlo da solo (nel mio codice), l'amministratore del server non eseguirà la risoluzione dei problemi / aggiustamenti.


9
Informazioni sui server virtuali e su come un singolo host è in grado di ospitare molti siti Web.
Wallyk,

Presumo che ci sia qualche ragione per cui non puoi semplicemente usare il nome di dominio?
Isaac Rabinovitch,

@Isaac Rabinovitch: user1502776 dice "c'è qualcosa di sbagliato nei risolutori DNS con il mio servizio di web hosting (non sarà risolto !!)" e "Vorrei risolverlo da solo (nel mio codice), nessuna risoluzione dei problemi / la regolazione verrà eseguita dall'amministratore del server ".
Bavi_H,

3
Se l'amministratore del tuo server è così stupido, devi trovare un altro provider di web hosting.
Michael Hampton,

Risposte:



10

Come ha detto Wallyk, si tratta di server virtuali

Prendi questo esempio per apache

<VirtualHost *:80>
ServerName example2.com
DocumentRoot C:/www/example2.com
</VirtualHost>

<VirtualHost *:80>
ServerName example.com
DocumentRoot C:/www/example.com
</VirtualHost>

In c: \ www \ example.com crea un file indice che dice "Hello World! Example.com"

in c: \ www \ example2.com crea un file indice che dice "Hellow World! example2.com"

E cambia il tuo file hosts in

127.0.0.1 example.com
127.0.0.1 example2.com

Quindi vai su http://example.com quindi vai su http://example2.com

In questo modo è possibile avere più siti per singolo IP

Quindi sostanzialmente la risposta è no, non sarai in grado di ottenere quel sito dall'ip.


Capisco che il solo IP non è abbastanza. Ma c'è qualche comando PHP che utilizza IP e nome host che fornisco per recuperare pagine Web remote? Il comando non dovrebbe interrogare DNS.
user1502776

4
Anche se questo può essere tecnicamente accurato, non affronta la domanda. La domanda è: come richiedere un sito specifico con un nome host noto a un server con un IP noto, senza risolvere automaticamente l'indirizzo IP tramite DNS, utilizzando uno script PHP. Non sta chiedendo come trovare un nome host corrispondente a un determinato IP. Il commento di wallyk è più pertinente, perché il suo collegamento include informazioni sull'intestazione Hostnecessarie affinché un server possa distinguere tra i siti Web che ospita e servire quello corretto.
Bob,

5

Dici di voler specificare manualmente sia il nome host che l'indirizzo IP, invece di affidarti a un server DNS al di fuori del tuo controllo. Guardando i commenti nella documentazione di file_get_contents , vedo che i commentatori hanno risolto problemi simili creando un contesto che contiene l'intestazione Host: necessaria. Qualcosa come questo:

$context = stream_context_create(array('http' => array('header' => 'Host: www.allaboutcircuits.com')));
$data = file_get_contents('http://68.233.243.63/', 0, $context);

Ovviamente, tieni presente che lo svantaggio di specificare manualmente sia il nome host che l'indirizzo IP è che se l'indirizzo IP cambia in futuro (ad esempio, se il sito si sposta su un nuovo provider di hosting), il tuo codice potrebbe smettere di funzionare fino al aggiorni manualmente l'indirizzo IP.


2

L'indirizzo IP da solo non è sufficiente per identificare in modo univoco il sito in cui si desidera visitare quando più host virtuali sono in esecuzione sulla stessa porta / server. In tal caso, è necessario specificare l'intestazione Host nella richiesta HTTP che identifica il nome del server. Puoi farlo direttamente tramite telnet alla porta 80:

$ telnet 68.233.243.63 80
Trying 68.233.243.63...
Connected to 68.233.243.63.
Escape character is '^]'.
GET / HTTP/1.1
Host: www.allaboutcircuits.com

dove si digita il comando telnet e le righe GET e Host, quindi si ottiene il codice sorgente HTML restituito dal server.

Oppure puoi usare l'arricciatura dove aggiungi specificamente l'intestazione (con il -Hflag).

curl 68.233.243.63 -H "Host: www.allaboutcircuits.com"

1

In secondo luogo, per qualche motivo, c'è qualcosa che non va nei resolver DNS con il mio servizio di web hosting (non sarà risolto !!)

È possibile utilizzare un altro server DNS sul lato client, nel caso in cui non sia l'host Web: 8.8.8.8 e 8.8.8.6 sono gestiti da Google e 4.4.4.2 è un standby comune. Namebench ti permetterà di trovare il più veloce. In alternativa, è possibile utilizzare un servizio proxy di qualche tipo (eseguo il mio su un VPS o utilizzo Tor, ma ci sono altre opzioni).

Poiché si tratta di PHP, un'opzione ancora più semplice sarebbe quella di eseguire il codice su un altro sistema. I Kludges non sono mantenibili.


sembra che sia su un host condiviso, e non può modificare il DNS, motivo per cui ha un avvertimento "Vorrei risolverlo da solo (nel mio codice), l'amministratore del server non eseguirà la risoluzione dei problemi / aggiustamenti. " Non penso che possa modificare il DNS. . .
Ernie,

1
Può testare un server DNS alternativo sul lato client. Se il suo host web non sta configurando correttamente i vhosts, ha bisogno di un altro host web.
Journeyman Geek
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.