¿Cómo ir a un sitio web en un servidor compartido por su dirección IP?

18

Tengo algunas preguntas, por favor ayuda:

Puño, puedo acceder a la búsqueda de Google simplemente escribiendo http://74.125.224.211, porque esta es la dirección IP devuelta por nslookup.

Sin embargo, no pude hacerlo con las direcciones IP devueltas de www.yahoo.com. ¿Cómo voy a la página de búsqueda de Yahoo por su IP?

Otro ejemplo http://www.allaboutcircuits.comlo resolverá el 68.233.243.63servidor DNS, pero si voy http://68.233.243.63, me sale "¡Hola, mundo!".

Segundo, por alguna razón, hay algo mal con los solucionadores de DNS con mi servicio de alojamiento web (¡no se solucionará!) . Entonces comandos como

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

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

¿Cómo puedo solucionar esto con la dirección IP,

68.233.243.63

Quiero decir, ¿de alguna manera adjuntar el parámetro de nombre de host HTTP a get_file_contents()?

Me gustaría resolver esto por mi propia cuenta (en mi código), el administrador del servidor no realizará ninguna solución de problemas / ajuste.

user1502776
fuente
99
Lea sobre los servidores virtuales y cómo un solo host puede alojar muchos sitios web.
wallyk
¿Asumo que hay alguna razón por la que no puedes usar el nombre de dominio?
Isaac Rabinovitch
@Isaac Rabinovitch: user1502776 dice "hay algo mal con los solucionadores de DNS con mi servicio de alojamiento web (¡no se solucionará!") Y "Me gustaría resolver esto por mi parte (en mi código), sin solución de problemas / el ajuste lo realizará el administrador del servidor ".
Bavi_H
3
Si el administrador de su servidor es tan estúpido, debe buscar un proveedor de alojamiento web diferente.
Michael Hampton

Respuestas:

10

Como dijo wallyk, son servidores virtuales

Tome este ejemplo para apache

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

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

En c: \ www \ example.com haga un archivo de índice que diga "¡Hola, mundo! Example.com"

en c: \ www \ example2.com haga un archivo de índice que diga "¡Hellow World! example2.com"

Y cambie su archivo de hosts a

127.0.0.1 example.com
127.0.0.1 example2.com

Luego vaya a http://example.com luego vaya a http://example2.com

Así es como puede tener múltiples sitios por ip individual

Básicamente, la respuesta es que no, no podrá obtener ese sitio desde la IP.

Kris
fuente
Entiendo que la IP por sí sola no es suficiente. Pero, ¿hay algún comando PHP que use IP y nombre de host que proporcione para buscar páginas web remotas? El comando no debe consultar DNS.
user1502776
44
Si bien esto puede ser técnicamente preciso, no aborda la cuestión. La pregunta es cómo solicitar un sitio específico con un nombre de host conocido de un servidor con una IP conocida, sin resolver automáticamente la dirección IP a través de DNS, utilizando un script PHP. No está preguntando cómo encontrar un nombre de host correspondiente a una IP determinada. El comentario de wallyk es más relevante, porque su enlace incluye información en el Hostencabezado necesario para que un servidor distinga entre los sitios web que aloja y sirve el correcto.
Bob
5

Dice que desea especificar manualmente el nombre de host y la dirección IP, en lugar de confiar en un servidor DNS fuera de su control. Al observar los comentarios en la documentación file_get_contents , veo que los comentaristas allí han resuelto problemas similares al crear un contexto que contiene el Host: encabezado necesario. Algo como esto:

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

Por supuesto, tenga en cuenta que la desventaja de especificar manualmente tanto el nombre de host como la dirección IP es que si la dirección IP cambia en el futuro (por ejemplo, si el sitio se muda a un nuevo proveedor de alojamiento), su código podría dejar de funcionar hasta actualiza manualmente la dirección IP.

Bavi_H
fuente
2

La dirección IP por sí sola no es suficiente para identificar de forma exclusiva a qué sitio desea ir cuando se ejecutan varios hosts virtuales en el mismo puerto / servidor. En ese caso, debe especificar el encabezado Host en la solicitud HTTP que identifica el nombre del servidor. Puede hacer esto directamente a través de telnet al puerto 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

donde escribe el comando telnet y las líneas GET y Host, y luego obtiene el código fuente HTML devuelto por el servidor.

O puede usar curl donde agrega específicamente el encabezado (con la -Hbandera).

curl 68.233.243.63 -H "Host: www.allaboutcircuits.com"
dr jimbob
fuente
1

Segundo, por alguna razón, hay algo mal con los solucionadores de DNS con mi servicio de alojamiento web (¡no se solucionará!)

Podría utilizar otro servidor DNS en el lado del cliente, en caso de que no sea el servidor web: 8.8.8.8 y 8.8.8.6 son ejecutados por Google, y 4.4.4.2 es un modo de espera común. Namebench te permitirá encontrar el más rápido. Alternativamente, podría usar un servicio proxy de algún tipo (ejecuto el mío en un VPS, o uso Tor, pero hay otras opciones).

Como se trata de PHP, una opción aún más fácil sería ejecutar el código en otro sistema. Kludges no son mantenibles.

Journeyman Geek
fuente
Parece que está en un host compartido y no puede modificar el DNS, por lo que tiene la advertencia "Me gustaría resolver esto por mi cuenta (en mi código), el administrador del servidor no hará ninguna solución de problemas / ajuste. " No creo que pueda modificar el DNS. . .
ernie
1
Puede usar un servidor DNS alternativo en el lado del cliente para probar. Si su proveedor de alojamiento web no está configurando vhosts correctamente, necesita otro proveedor de alojamiento web.
Journeyman Geek