Apache本地networking

我试图从本地networking的另一个来源到达我的本地Apache。 运行Apache的机器IP是192.168.2.36,操作系统是xubuntu 12.04。 通过这台机器,我可以到达Apache实例,但不能从任何其他PC或移动设备。 路由器的防火墙被closures。

sudo netstat -tulpen | grep apache 

给我:

 tcp 0 0 192.168.2.36:80 0.0.0.0:* LISTEN 0 1115713 4606/apache2 

或者(取决于ports.conf中的configuration):

 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 0 1115713 4606/apache2 

两者都不起作用。 主机在networking中的其他机器可以ping通。

我简直无法想象,为什么事情变得如此困难…

您是否区分本地networking中的其他可以ping通Apache服务器的计算机和尝试访问Apache服务器的远程PC /移动设备(并在其上失败)? 我的意思是,他们在同一个networking?

只是为了确保,如果您明白这一点很抱歉提及: 192.168.2.36是一个私人IP地址,不会被路由,因此无法从互联网访问。 您提到的远程PC和移动设备必须位于Apache服务器所在的同一本地networking中,或者通过您的路由器 (不是您的ISP)访问,除非您已将其configuration为将某个外部端口转发到端口80你的Apache服务器,当然 – 我想不是这样的)。

我现在假设远程PC位于同一个本地networking(假设IP地址为192.168.2.100 )。

1)首先检查Apache是​​否可以在192.168.2.36本地访问(你写道:从服务器本身的访问工作 – 为了完整起见我在这里列出):

 telnet 192.168.2.36 80 

如果你没有得到类似的东西:

 $ telnet 192.168.2.36 80 Trying 192.168.2.36... Connected to 192.168.2.36. Escape character is '^]'. 

不要看得更远,并检查你的Apacheconfiguration/安装,因为它不应该如此。

如果你看到Apache正在运行的输出。 使用Ctrl-]closuresTelnet会话并继续执行2)。

2)现在让我们看看是否有来自远程PC(192.168.2.100)的networkingstream量达到192.168.2.36。 在192.168.2.36上键入:

 sudo tcpdump dst 192.168.2.36 and dst port 80 

转储任何networking数据包与目的地192.168.2.36:80。

现在login到192.168.2.100,input:

 telnet 192.168.2.36 80 

然后“GET /”。 这是一个HTTP请求,让我们看看服务器是否得到它。

回到tcpdump命令并检查它的输出。 如果看起来类似于这样:

 22:12:13.748106 IP 192.168.2.100.50272 > 192.168.2.36.http: Flags [S], seq 3557385561, win 65535, options [mss 16344,nop,wscale 4,nop,nop,TS val 239423238 ecr 0,sackOK,eol], length 0 22:12:13.748190 IP 192.168.2.100.50272 > 192.168.2.36.http: Flags [.], ack 1456211961, win 9186, options [nop,nop,TS val 239423238 ecr 239423238], length 0 

数据包正在通过,所以继续进行3)。

如果您没有看到192.168.2.100任何数据包,请在本地networking中的其他几台PC上testing上述步骤。 如果看到相同的行为,请刷新192.168.2.36上的防火墙规则:

 sudo iptables-save > /tmp/save sudo iptables -F 

然后再试一次。 如果没有数据包到达192.168.2.36 ,很难说出了什么问题…一些疯狂的猜测是…但是首先恢复iptablesconfiguration:

 sudo iptables-restore < /tmp/save 

我说的是,一些狂野的猜测是: 192.168.2.36192.168.2.100有一个损坏的ARPcaching(用arp -n列出ARPcaching,然后用arp -d ip_address删除这些条目), 192.168.2.36有一个有缺陷的以太网卡或电缆,IP地址192.168.2.36由networking上的另一台PC使用,远程PCconfiguration为使用IPv6 …

3)检查IP数据包是否回到192.168.2.100 。 用Ctrl-C停止tcpdump并键入:

 sudo tcpdump dst 192.168.2.100 src port 80 

查看从源端口80(即Apache服务器)返回到192.168.2.100任何数据包。 如果你看到类似这样的输出:

 23:03:33.054023 IP 192.168.2.36.http > 192.168.2.100.50471: Flags [S.], seq 1739061544, ack 502726814, win 65535, options [mss 16344,nop,wscale 4,nop,nop,TS val 242492771 ecr 242492771,sackOK,eol], length 0 23:03:33.054062 IP 192.168.2.36.http > 192.168.2.100.50471: Flags [.], ack 1, win 9186, options [nop,nop,TS val 242492771 ecr 242492771], length 0 23:03:34.344572 IP 192.168.2.36.http > 192.168.2.100.50471: Flags [.], ack 8, win 9186, options [nop,nop,TS val 242494052 ecr 242494052], length 0 

数据包正在返回。 继续到4)。

没有tcpdump输出意味着192.168.2.100没有收到任何数据包…也许防火墙? 而从另一台远程PC,同样的行为? ARP问题(使用arp -n列出ARPcaching,然后使用arp -d ip_address删除条目)?

4)检查上面的telnet命令的输出。 如果看起来类似于这样:

 Trying 192.168.2.36.... Connected to 192.168.2.36. Escape character is '^]'. GET / Location: http://192.168.2.36 Content-Type: text/html; charset=UTF-8 

您的networking浏览器可能有问题。 也许HTTP代理不排除本地networking中的计算机?