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我遇到问题的客户端。

编辑:它也可以工作,telnettelnet不允许管道。

第二次编辑回答 MickeyB:

确实,主机头没有被传输,但是正如上面的主机所示hive,我已经将defaultApache 的 vhost 配置为像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 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(版本 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>

如果您尝试访问虚拟主机,则操作不正确。您需要发送 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

相关内容