apache2 在 ubuntu 14 上 - localhost 可以工作但 IP 地址无法使用。

我刚在我的电脑上安装了Apache2,还有PHP5。

我可以访问"localhost"并且它正常工作。但是我无法从另一台机器或者使用IP地址在本地访问这个Web服务器。 其他帖子,比如Apache(和其他服务)只能在localhost上工作,而不能在IP地址上工作建议检查防火墙设置,并确保我不仅监听localhost还要监听*80端口。

这是我在ports.conf文件中的设置:

me@mydev:/etc/apache2$ cat ports.conf 
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 80

<IfModule ssl_module>   Listen 443 </IfModule>

<IfModule mod_gnutls.c>     Listen 443 </IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet 

默认防火墙似乎没有启用:
me@mydev:/etc/apache2$ sudo ufw status
[sudo] password for me: 
Status: inactive
me@mydev:/etc/apache2$ 

只是不确定还应该检查什么。 谢谢。
编辑1
Results from IP tables query:

me@mydev:/etc/apache2$ sudo iptables -L
[sudo] password for me: 
Chain INPUT (policy ACCEPT) target     prot opt source              
destination         

Chain FORWARD (policy ACCEPT) target     prot opt source              
destination         

Chain OUTPUT (policy ACCEPT) target     prot opt source              
destination
me@mydev:/etc/apache2$

我能够从不同的机器成功地对该盒子进行ping测试。
编辑2:
以下是nmap命令的结果:
me@mydev:/var/www/html/test$ nmap localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2014-12-01 04:04 EST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00020s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
631/tcp open  ipp

Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds
me@mydev:/var/www/html/test$ 

关于IP地址:
me@mydev:/var/www/html/test$ nmap 10.238.59.63

Starting Nmap 6.40 ( http://nmap.org ) at 2014-12-01 04:08 EST
Nmap scan report for mydev.testdomain.bg.org (10.238.59.63)
Host is up (0.00024s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds
me@mydev:/var/www/html/test$

请在问题中编辑输出sudo iptables -L的结果。还请尝试ping目标IP地址。 - Salem
当你在本地主机和你的机器IPv4地址上运行'nmap'时,它会给出什么结果?你想让Apache监听IPv6吗?你需要让Apache监听你的IPv4地址,或者是"监听所有地址"的地址'0.0.0.0'。所以仅仅设置你希望Apache监听连接的端口是不够的。 - Anders
我不确定出了什么问题,但为了消除一些困惑...你并不是在"localhost"或你的IP地址上进行监听,而是只在一个端口上监听,该端口位于你机器的IP地址上。"localhost"只是你自己IP地址的一个快捷方式。此外,默认情况下,Apache会响应来自局域网其他计算机的连接。当你尝试连接时,在浏览器中会出现什么错误? - Marty Fried
@MartyFried,当我尝试从局域网上的另一台机器连接时,我收到了一个连接超时的错误消息。 - dot
@Anders,请查看我的编辑,其中包括了“nmap”命令的结果。 - dot
好的,看起来没问题。你的Apache(?)开放了80端口,我想。你有查看过/var/log/apache2/*中的Web服务器日志文件吗?使用带有-f选项的tail(1)命令可以在任何日志中有新内容时显示新行。在访问你的机器时这样做。日志中应该会出现一些信息。所以尝试一下tail -f /var/log/apache/*.log,看看在你浏览你的机器时是否有什么显示出来。 - Anders
如果您使用名称而不是IP地址,请使用getent hosts machine.example.com来从名称解析IP地址,就像系统一样。 - Anders
2个回答

这实际上不是一个答案,但是它太详细了以至于不能作为评论,可能在确定更多信息后会成为一个答案。
当我阅读你的帖子时,我以为你在使用你的局域网IP地址(内部IP地址),但是在比较你的命令结果和我的命令结果之后,迫使我更仔细地观察,我发现你正在尝试使用外部公共IP地址。
这种情况导致了更多的变量和更复杂的情况。
你是使用实际的IP地址(xxx.xxx.xxx.xxx),还是使用域名?
"mydev.testdomain.bg.org"是实际的域名吗?我根本没有在注册表中看到这个 - 你是如何获取DNS的?
你的Apache配置文件在/etc/apache2/sites-enabled中的VirtualHost设置中有指定ServerName吗?
这个系统是托管在什么样的系统上?我曾经遇到过某些路由器的情况,在这些路由器上无法使用外部公共IP从本地机器访问本地站点(例如Comcast的路由器)。

编辑:另外,当你根据一些可能对你的建议一无所知的人提出的建议对你的配置进行更改时,如果这些更改并没有解决你的问题,你会回去撤销更改以恢复原始配置吗?你应该要么这样做,要么保留好关于所有更改的记录。


实际上,我并没有使用公共IP地址。这只是一个内部地址。我列出的域名只是一个虚假域名。我正在使用IP地址...配置文件中没有定义ServerName变量。这台机器只是一个64位的Ubuntu桌面系统。这只是一个测试系统。 - dot
@dot: 那么,为什么数据这么混乱呢?你是如何确定IP地址的? - Marty Fried
我执行了ifconfig命令来获取IP地址。你能详细解释一下为什么你认为它正在使用外部地址吗?这样我们就能保持一致了。谢谢! - dot
@dot: 大部分时间,我被你使用外部域名的数据所愚弄了。我对IP地址并不是很了解,所以它可能是一个本地地址,但我习惯于看到192.168.x.x或10.0.x.x。我不确定,所以才会问。 - Marty Fried
1@Marty. 任何以10.x.x.x开头的地址都是私有地址。实际上,它被写作10.0.0.0/8,但通常会被划分为带有10.x.x.0/24网络。对于192.168.0.0/16也是一样,通常会被划分为较小的192.168.x.0/24网络。 - Anders
@Anders:谢谢,我有点明白了,但不是100%确定。他最初的写法让我以为是外部链接——bg.org是一个真实的域名。问题是,我创建过很多本地和远程网站,从来没有遇到过需要做什么特别的才能使其正常工作的情况,所以有些可疑。 - Marty Fried
通常路由器会进行域名解析,将主机名转换为私有地址。然后您可以使用DMZ或端口转发通过路由器的公共地址将其连接到您的Web服务器,并且该公共地址在您的公共DNS服务器中。 因此,相同的DNS名称根据查询来源的不同而解析为不同的IPv4地址。这就是为什么我问getent hosts解析成了什么。请注意,这在运营商级NAT中无法工作,这是即将到来的问题。:( 不,从局域网将公共地址路由到服务器很困难,这是NAT的一个问题之一。这个问题可以通过IPv6来解决。 - Anders

如果您正在使用虚拟机,尝试重新启动它! 我在一次全新安装的Ubuntu中遇到了与您相同配置的完全相同问题。本地主机是正常工作的,但其他任何东西都不行。重新启动解决了我的问题。