好的,我有一个 Web 应用,想在一堆不同的设备上进行测试。为了轻松完成此操作,我需要将该应用公开到外联网,以便我可以从任何地方访问它。
我的机器的内网IP是192.168.1.66,是路由器手动分配的。
设置了DMZ,所以192.168.1.66应该完全暴露在外网。
然而 Apache 甚至没有从内联网做出响应。
访问http://localhost/应用程序显示了 XAMPP 安装,但是http://192.168.1.66/app才不是。
该环境是 Windows 下完全标准的 XAMPP 安装。我没有做任何更改,只是将 Web 应用程序添加到了文档根目录。Httpd.conf
具有默认的“Listen 80”,因此这应该不是问题。
我尝试完全禁用 Windows 防火墙,但没有成功。
我也不知道这是否正常,但“netstat -a”显示了端口 80 的多个条目,如下所示:
TCP [::]:80 DESKTOP-DVN0SQB:0 LISTENING
TCP 192.168.1.66:80 DESKTOP-DVN0SQB:0 LISTENING
TCP 0.0.0.0:80 DESKTOP-DVN0SQB:0 LISTENING
Netstat 还向我显示了一个我不认识的 IP 地址 192.168.56.1。令我困惑的是,我尝试访问它,但奇怪的是,我的应用程序可以在http://192.168.56.1/app。但这好像是本地地址因为我无法从内网的任何设备访问它。
怎么回事?这个 192.168.56.1 地址是什么?我记得几天前玩 Vagrant 时看到过类似的地址,这有关系吗?我不再有任何 Vagrant VM,我已经销毁了所有 VM(以防万一有关系)。
最重要的是:为什么我无法从内网访问 Apache?因为它肯定阻止我从外网访问它。
答案1
[W]为什么我不能从内网访问Apache?
因为 Apache 显然绑定到了您尝试访问的内部网之外的网络适配器。
需要明确的是,在这种情况下192.168.1.x
和192.168.56.x
是独立的网络(假设标准 C 类子网掩码为255.255.255.0
)。
Apache 使用的地址 ( 192.168.56.1
) 很可能是虚拟网络适配器的默认 IP,用于虚拟机。Apache 似乎已选择此适配器/IP 来响应通用Listen 80
指令(如您所提到的)。
我记得前几天玩Vagrant的时候看到过类似的地址,这有什么关系吗?
这可能相关。如果 Vagrant 安装了任何虚拟网络适配器,除非您特意删除了这些适配器,否则它们很可能仍在您的系统上处于活动状态。
如果您确实不使用该虚拟网络适配器,您可能希望将其完全删除。
无论如何,你可以httpd.conf
使用更具体的Listen
指令将 Apache(根据需要)绑定到指定的 IP,例如
Listen 192.168.1.66:80
请注意,由于您对 Vagrant 发表了评论,我假设您的服务器/应用程序未在 VM 中运行。如果是(也许您运行的是 VirtualBox),则需要调整 VM 的设置以使其可访问内联网。
答案2
如你所说,http://localhost/应用程序在内网中被识别。问题与应用程序当前运行的 IPv4 有关,因此请尝试验证这一点。我不知道您使用的是哪个应用程序,但应该有一个 config.php 文件,您可以在其中设置可以访问的受信任域。
此外,我怀疑这样一个常见的 IPv4(192.168.1.66)是否可以从任何地方访问:我不知道您的整个网络配置,但应该有一个全局分配的动态 IP,并且引用的地址只是本地的。