Apache Vhost funktioniert nicht konsistent

Apache Vhost funktioniert nicht konsistent

Ich habe einen virtuellen Host auf meinem Webserver, dessen einziges und einzigartiges Ziel darin besteht, die IP-Adresse des Clients zurückzugeben:

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

Dies hilft mir bei der Behebung von Netzwerkproblemen, insbesondere wenn NAT beteiligt ist. Daher habe ich nicht immer eine Domänennamenauflösung und dieser Dienst muss auch dann funktionieren, wenn er über seine IP-Adresse abgefragt wird.

Ich verwende es folgendermaßen:

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

Ich habe jedoch festgestellt, dass es zumindest von einem Computer aus nicht funktionierte:

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

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

Was ich überprüft habe:

Dies hat nichts mit IPv6 zu tun:

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

netcatVersion ist dieselbe (außer Plattform, 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

Es funktioniert bei Verwendung ohne das Rohr:

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

Und die Weiterleitung funktioniert zumindest mit einem Testdienst (der netcatauf 1234/TCP lauscht und auf stdout ausgibt).

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

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

netcatIch weiß nicht, ob dieses Problem eher mit oder zusammenhängt Apache, aber ich würde mich über alle Hinweise zur Fehlerbehebung freuen!

bznist der Server, hiveist ein funktionierender Client und sethist der Client, bei dem ich das Problem habe.

Bearbeiten: Es funktioniert auch mit, erlaubt telnetaber telnetkein Piping.

2. Bearbeitung als Antwort auf MickeyB:

Tatsächlich werden Host-Header nicht übertragen, aber wie hiveoben bei Host zu sehen ist, habe ich den defaultVhost von Apache so konfiguriert, dass er sich wie ydct.orgVhost verhält:

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>

Es funktioniert jedoch mit curl!

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

Ausgabe von apache2 -SGepostet anhttp://pastebin.com/aSf446Jv

Mich würde aber interessieren, warum das mit netcat... nicht klappt.

Antwort1

Kurz gesagt, es ist die Version von Netcat, die Sie ausführen.

Ich habe die Befehlszeichenfolge auf meinen Maschinen wie folgt getestet:

Mac OS X Lion:

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 (Version 6)

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

Erst als ich zu Ubuntu „Lucid“ gewechselt bin (was Sie anscheinend verwenden), habe ich Folgendes erhalten:

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

Es scheint, dass Ubuntu standardmäßig nc.openbsd und nicht nc.traditional verwendet (was bei Debian der Standard ist). Sobald ich die traditionelle Version verwende, erhalte ich die gewünschte Ausgabe:

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

Merkwürdig ist, dass beide Ihrer Client-Rechner nc.openbsd haben, sich aber dennoch unterschiedlich verhalten. Natürlich könnte es sein, dass einer von ihnen entweder eine andere Version von nc.openbsd oder eine ganz andere Version von Ubuntu hat. In beiden Fällen können Sie Ihre Versionen von nc.openbsd synchronisieren oder zu nc.traditional wechseln.

Antwort2

Funktioniert bei mir :)

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>

Wenn Sie versuchen, den virtuellen Host anzusprechen, machen Sie das falsch. Sie müssen einen Host:-Header senden, um den virtuellen Host zu identifizieren, den Sie verwenden möchten.

Die beste Möglichkeit, Ihren „Was ist meine IP“-Dienst zu verwenden, wäre curl. Hey, schau mal, ich habe dasselbe Problem, wenn ich das mache, was du machst:

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


REPARIEREN SIE IHRE VHOSTS!!!

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

Antwort3

Legen Sie eine Wartezeit fest und versuchen Sie es erneut:

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

verwandte Informationen