apache vhost работает не стабильно

apache vhost работает не стабильно

На моем веб-сервере есть виртуальный хост, единственной и уникальной целью которого является возврат IP-адреса клиента:

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

И конвейер работает, по крайней мере, с тестовой службой ( netcatпрослушивание на 1234/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это клиент, на котором у меня возникла проблема.

Редактировать: Он также работает, telnetно telnetне допускает использования трубопроводов.

2-я правка в ответ на MickeyB:

Действительно, заголовки хоста не передаются, но, как видно на примере hiveхоста выше, я настроил defaultvhost Apache так, чтобы он вел себя как 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>

Однако это работает с 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

CentOS:

[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.openbsd, а не nc.traditional (который используется по умолчанию в Debian). После использования традиционной версии я получил желаемый вывод:

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>

Если вы пытаетесь попасть в vhost, вы делаете это неправильно. Вам нужно отправить заголовок Host:, чтобы идентифицировать виртуальный хост, который вы хотите использовать.

Лучший способ использовать ваш сервис "какой у меня IP" - curl. Эй, смотрите, я вижу ту же проблему на своей стороне, когда делаю то, что делаете вы:

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


ИСПРАВЬТЕ ВАШИ 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

решение3

Установите время ожидания и повторите попытку:

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

Связанный контент