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 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
它在沒有管道的情況下使用:
petrus@seth:~$ nc ydct.org 80 GET / 2a01:e35:ee8c:180:221:85ff:fe96:e485
並且管道至少與測試服務一起工作(
netcat
監聽 1234/tcp 並輸出到標準輸出)petrus@bzn:~$ nc -l -p 1234 GET / petrus@bzn:~$ petrus@seth:~$ echo "GET /" | nc ydct.org 1234 petrus@seth:~$
我不知道這個問題是否與
netcat
or更相關Apache
,但我很感激任何解決此問題的指針!
bzn
是伺服器,hive
是工作客戶端,seth
是我遇到問題的客戶端。編輯:它也適用於
telnet
但telnet
不允許管道。對 MickeyB 的第二次編輯:
確實沒有傳輸主機標頭,但如上面的
hive
主機所示,我已將default
Apache 的虛擬主機配置為像ydct.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
…
簡而言之,它是您正在執行的 netcat 版本。
我在我的機器上測試了命令字元串,如下所示:
Mac OS X 獅子:
yvaine:sqlite user$ echo -e "GET /" | nc 88.191.133.41 80 XX.XX.XX.168
自由BSD:
[root@freebsd82 /usr/ports]# echo -e "GET /" | nc 88.191.133.41 80 XX.XX.XX.168
中央作業系統:
[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“清醒”(這顯然是你正在執行的)是我得到這個的時候:
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。