Como ir para um site em um servidor compartilhado por seu endereço IP?

18

Eu tenho algumas perguntas, por favor ajude:

Fist, eu posso acessar a pesquisa do Google apenas digitando http://74.125.224.211 , porque este é o endereço IP retornado pelo nslookup.

No entanto, não consegui fazê-lo com os endereços IP retornados de www.yahoo.com. Como eu vou para a página de busca do Yahoo pelo seu IP?

Outro exemplo, http://www.allaboutcircuits.com será resolvido para 68.233.243.63 pelo servidor DNS, mas se eu for para http://68.233.243.63 , receberei "Hello world!".

Segundo, por algum motivo, há algo errado com os resolvedores de DNS com meu serviço de hospedagem na web (não será corrigido !!) . Então, comandos como

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

retornará php_network_getaddresses: getaddrinfo failed: Name or service not known

Como faço para contornar isso com o endereço IP,

68.233.243.63

Quero dizer, de alguma forma anexar o parâmetro hostname HTTP a get_file_contents() ?

Eu gostaria de resolver isso do meu próprio lado (no meu código), nenhuma solução de problemas / ajustes será feita pelo administrador do servidor.

    
por user1502776 15.09.2012 / 01:25

5 respostas

16

No seu script PHP, quando você o acessa pelo endereço IP, você também precisa enviar um cabeçalho Host: em sua solicitação com o nome de domínio correto.

Esta pergunta no Stack Overflow explica como fazer isso: link

    
por 15.09.2012 / 02:23
10

Como wallyk disse, são servidores virtuais

Veja este exemplo para o apache

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

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

Em c: \ www \ example.com faça um arquivo de índice dizendo "Hello World! example.com"

em c: \ www \ example2.com faça um arquivo de índice dizendo "Hellow World! example2.com"

E altere seu arquivo de hosts para

127.0.0.1 example.com
127.0.0.1 example2.com

Em seguida, acesse link em seguida, vá para o link

Então é assim que você pode ter vários sites por ip único

Então, basicamente, a resposta é: não, você não conseguirá obter esse site do ip.

    
por 15.09.2012 / 01:44
5

Você diz que deseja especificar manualmente o nome do host e o endereço IP, em vez de depender de um servidor DNS fora de seu controle. Observando os comentários na documentação do file_get_contents , vejo que os comentadores resolveram problemas semelhantes criando um contexto que contenha o cabeçalho Host: necessário. Algo parecido com isto:

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

Naturalmente, esteja ciente de que a desvantagem de especificar manualmente o nome do host e o endereço IP é que, se o endereço IP mudar no futuro (por exemplo, se o site for movido para um novo provedor de hospedagem), pare de trabalhar até que você atualize manualmente o endereço IP.

    
por 15.09.2012 / 04:07
2

O endereço IP, por si só, não é suficiente para identificar com exclusividade para qual site você deseja ir quando vários hosts virtuais estão sendo executados na mesma porta / servidor. Nesse caso, você precisa especificar o cabeçalho do host na solicitação HTTP que identifica o nome do servidor. Você pode fazer isso diretamente via telnet para a 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

onde você digita o comando telnet e as linhas GET e Host e, em seguida, obtém o código-fonte HTML retornado do servidor.

Ou você pode usar o curl, onde você adiciona especificamente o cabeçalho (com o -H flag).

curl 68.233.243.63 -H "Host: www.allaboutcircuits.com"
    
por 15.09.2012 / 06:35
1

Second, for some reason, there is something wrong with DNS resolvers with my web hosting service (it will not be fixed !!)

Você pode usar outro servidor DNS no lado do cliente, caso não seja o host da Web. 8.8.8.8 e 8.8.8.6 são executados pelo Google e 4.4.4.2 é um standby comum. Namebench permite encontrar o mais rápido. Alternativamente, você poderia usar um serviço de proxy de algum tipo (eu corro meu próprio em um VPS, ou use Tor, mas há outras opções).

Como isso é PHP, uma opção ainda mais fácil seria executar o código em outro sistema. Kludges não são passíveis de manutenção.

    
por 15.09.2012 / 01:54