Apache vhost が安定して動作しない

Apache vhost が安定して動作しない

私の Web サーバーには、クライアントの IP アドレスを返すことだけを目的とする vhost があります。

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

これは、特に NAT が関係する場合に、ネットワークの問題のトラブルシューティングに役立ちます。そのため、ドメイン名の解決が常に可能であるとは限らず、このサービスは IP アドレスで照会された場合でも機能する必要があります。

私はこのように使っています:

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

しかし、少なくともコンピューターからは動作していないことがわかりました。

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

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

確認したこと:

これは 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

netcatバージョンは同じです (プラットフォーム、i386 と 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

パイプなしで使用すると機能します:

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

そして、パイピングは少なくともテストサービス(netcat1234/tcp でリッスンし、stdout に出力)では機能します。

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

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

netcatこの問題がまたは のどちらに関連しているかはわかりませんがApache、この問題のトラブルシューティングに役立つヒントがあれば教えていただければ幸いです。

bznはサーバーであり、hive動作中のクライアントであり、seth問​​題が発生しているクライアントです。

編集: も動作しますがtelnettelnetパイピングは許可されません。

MickeyB への回答の 2 回目の編集:

確かにホスト ヘッダーは送信されませんが、上記のホストでわかるように、 Apache の vhost をvhostのように動作するようにhive構成しました。defaultydct.org

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>

ただし、 では動作しますcurl!

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

apache2 -S投稿の出力http://pastebin.com/aSf446Jv

しかし、なぜそれが機能しないのかを知りたいのですがnetcat...

答え1

つまり、実行している netcat のバージョンです。

私は自分のマシン上でコマンド文字列を次のようにテストしました。

Mac OS X ライオン:

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

セントOS:

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

Debian (バージョン 6)

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

Ubuntu "lucid" (どうやらあなたが実行しているもの) になって初めて、次のメッセージが表示されました:

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

Ubuntu のデフォルトは nc.traditional (Debian のデフォルト) ではなく nc.openbsd のようです。従来のバージョンを使用すると、必要な出力が得られました。

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

両方のクライアント マシンに nc.openbsd がインストールされているにもかかわらず、動作が異なるのは不思議です。もちろん、どちらか一方に異なるバージョンの nc.openbsd またはまったく異なるバージョンの Ubuntu がインストールされている可能性もあります。いずれの場合も、nc.openbsd のバージョンを同期するか、nc.traditional に切り替えることができます。

答え2

私にとってはうまくいきました:)

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>

仮想ホストにアクセスしようとしている場合は、その方法は間違っています。使用する仮想ホストを識別するために、Host: ヘッダーを送信する必要があります。

「私の IP は何か」サービスを使用する最良の方法は curl です。ほら、私もあなたと同じことをすると、同じ問題が発生します:

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


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

答え3

待機時間を設定して再試行してください:

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

関連情報