Apache vhost no funciona consistentemente

Apache vhost no funciona consistentemente

Tengo un vhost en mi servidor web cuyo único objetivo es devolver la dirección IP del cliente:

petrus@bzn:~$ cat /home/vhosts/domain.org/index.php
<?php echo $_SERVER['REMOTE_ADDR']; echo "\n" ?>

Esto me ayuda a solucionar problemas de red, especialmente cuando se trata de NAT. Como tal, no siempre tengo una resolución de nombre de dominio y este servicio debe funcionar incluso si lo consulta por su dirección IP.

Lo estoy usando de esta manera:

petrus@hive:~$ echo "GET /" | nc 88.191.133.41 80
191.51.4.55

petrus@hive:~$ echo "GET /" | nc ydct.org 80
191.51.4.55

router#more http://88.191.133.41/index.php
88.191.124.254

Sin embargo, descubrí que no funcionaba al menos desde una computadora:

petrus@seth:~$ echo "GET /" | nc ydct.org 80
petrus@seth:~$

petrus@seth:~$ echo "GET /" | nc 88.191.133.41 80
petrus@seth:~$

Lo que verifiqué:

Esto no está relacionado con ipv6:

petrus@seth:~$ echo "GET /" | nc -4 ydct.org 80
petrus@seth:~$ 

petrus@hive:~$ echo "GET /" | nc ydct.org 80
2a01:e35:ee8c:180:21c:77ff:fe30:9e36

netcatla versión es la misma (excepto la plataforma, i386 vs x64):

petrus@seth:~$ type nc
nc est haché (/bin/nc)
petrus@seth:~$ file /bin/nc
/bin/nc: symbolic link to `/etc/alternatives/nc'
petrus@seth:~$ ls -l /etc/alternatives/nc
lrwxrwxrwx 1 root root 15 2010-06-26 14:01 /etc/alternatives/nc -> /bin/nc.openbsd

petrus@hive:~$ type nc
nc est haché (/bin/nc)
petrus@hive:~$ file /bin/nc
/bin/nc: symbolic link to `/etc/alternatives/nc'
petrus@hive:~$ ls -l /etc/alternatives/nc
lrwxrwxrwx 1 root root 15 2011-05-26 01:23 /etc/alternatives/nc -> /bin/nc.openbsd

Funciona cuando se usa sin la tubería:

petrus@seth:~$ nc ydct.org 80
GET /
2a01:e35:ee8c:180:221:85ff:fe96:e485

Y la tubería funciona al menos con un servicio de prueba ( netcatescuchando en 1234/tcp y salida a stdout)

petrus@bzn:~$ nc -l -p 1234
GET /
petrus@bzn:~$

petrus@seth:~$ echo "GET /" | nc ydct.org 1234
petrus@seth:~$

No sé si este problema está más relacionado con netcato Apache, ¡pero agradecería cualquier sugerencia para solucionar este problema!

bznes el servidor, hivees un cliente que funciona y sethes el cliente en el que tengo el problema.

Editar: también funciona con tuberías telnet, pero telnetno permite.

Segunda edición en respuesta a MickeyB:

De hecho, los encabezados de host no se transmiten, pero como se vio con hiveel host anterior, configuré el defaultvhost de Apache para que se comporte como ydct.orgvhost:

petrus@bzn:/etc/apache2/sites-available$ cat default
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName 88.191.133.41
        ServerAlias 2a01:e1b:1:132:1a0a:a9ff:fec8:f0a9
        DocumentRoot /home/vhosts/ydct.org/
</VirtualHost>

Sin embargo, funciona con curl!

petrus@seth:~$ curl ydct.org
2a01:e35:ee8c:180:221:85ff:fe96:e485

Salida de apache2 -Spublicado enhttp://pastebin.com/aSf446Jv

Pero me gustaría saber por qué no funciona con netcat...

Respuesta1

En resumen, es la versión de netcat que estás ejecutando.

Probé la cadena de comando en mis máquinas de la siguiente manera:

Mac OS X León:

yvaine:sqlite user$ echo -e "GET /" | nc 88.191.133.41 80
XX.XX.XX.168

FreeBSD:

[root@freebsd82 /usr/ports]# echo -e "GET /" | nc 88.191.133.41 80
XX.XX.XX.168

CentOS:

[root@kvm0001 ~]# echo -e "GET /" | nc 88.191.133.41 80
XX.XX.XX.168

Debian (versión 6)

root@debian:~# echo -e "GET /" | nc 88.191.133.41 80
XX.XX.XX.168

No fue hasta que llegué a Ubuntu "lúcido" (que es lo que aparentemente estás ejecutando) cuando obtuve esto:

root@ubuntu:~# echo -e "GET /" | nc 88.191.133.41 80
root@ubuntu:~# 

Parece que Ubuntu tiene por defecto nc.openbsd en lugar de nc.traditional (que es el valor predeterminado en Debian). Una vez que utilicé la versión tradicional, recibí el resultado deseado:

root@ubuntu:~# echo -e "GET /" | nc.traditional 88.191.133.41 80
XX.XX.XX.168

Lo curioso es que ambas máquinas cliente tienen nc.openbsd, pero tienen un comportamiento diferente. Por supuesto, podría ser que uno de ellos tenga una versión diferente de nc.openbsd o una versión completamente diferente de Ubuntu. En cualquier caso, puede sincronizar sus versiones de nc.openbsd o cambiar a nc.traditional.

Respuesta2

Funciona para mi :)

michael@challenger:~$ echo -e "GET /\n" | nc 88.191.124.41 80
<html><body><h1>It works!</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
</body></html>

Si está intentando acceder al vhost, lo está haciendo incorrectamente. Debe enviar un encabezado Host: para identificar el host virtual que desea utilizar.

La mejor manera de utilizar el servicio 'cuál es mi IP' sería curl. Oye, mira, veo el mismo problema por mi parte cuando hago lo que estás haciendo tú:

michael@challenger:~$ echo -e "GET /" | nc ip.mydomain.ca 80
michael@challenger:~$ curl ip.mydomain.ca
192.168.0.135


¡¡¡ARREGLA TUS VHOST!!!

michael@challenger:~$ curl -v 88.191.124.41
* About to connect() to 88.191.124.41 port 80 (#0)
*   Trying 88.191.124.41... connected
* Connected to 88.191.124.41 (88.191.124.41) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.21.3 (x86_64-pc-linux-gnu) libcurl/7.21.3 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18
> Host: 88.191.124.41
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Fri, 25 Nov 2011 22:11:31 GMT
< Server: Apache/2.2.14 (Ubuntu)
< Last-Modified: Wed, 25 Aug 2010 08:11:38 GMT
< ETag: "840d09-b1-48ea16e57f5a6"
< Accept-Ranges: bytes
< Content-Length: 177
< Vary: Accept-Encoding
< Content-Type: text/html
< X-Pad: avoid browser bug
< 
<html><body><h1>It works!</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
</body></html>
* Connection #0 to host 88.191.124.41 left intact
* Closing connection #0

Respuesta3

Establece un tiempo de espera y vuelve a intentarlo:

$ echo "GET /" | nc -w 3 88.191.124.41 80

información relacionada