在虚拟机上访问网站

在虚拟机上访问网站

我正在尝试使用虚拟机,以便我和公司中的其他一些人测试对 Magento 商店的更改。虚拟机不受我控制(大部分),托管在我们内部网上的 Windows Server 机器上。我不知道版本详细信息或实际使用的虚拟机,但如果需要,我可能可以获取此信息。我创建了一个 Ubuntu VM,安装了 Magento(v1.8)。我从我的网上商店备份并恢复到这个虚拟机。如果我留在虚拟机内,一切都会正常(对于我正在做的事情来说已经足够好了)。

问题是我无法从 VM 外部访问托管在 VM 上的商店。

该位置/var/www包含默认的 apache index.html。商店位于.../var/www/magento

如果我仅将浏览器(从 VM 外部)指向 VM 的 IP 地址,我就会得到 apache 的默认 index.html。如果我查看 apache access.log,我会看到您期望看到的正常消息。太棒了!如果我将浏览器指向“/magento”,我就会得到 VM 主机的 IIS 默认网页!apache 访问日志显示它返回了一些重定向(301、302)错误代码(我对此不太熟悉)。

哦,我确实尝试过移动 ApacheDocumentRoot/var/www/magento遇到了许多其他问题,所以我把它放回去了。

如果这是 VM 主机的问题,您能给我一些建议,让我可以联系到合适的人吗?我做错了什么?

apache2ctl -S输出(屏蔽的服务器名称):

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server example.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost example.com (/etc/apache2/sites-enabled/000-default:1)

输出cat /proc/version

Linux version 3.2.0-77-generic (buildd@toyol) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #112-Ubuntu SMP Tue Feb 10 15:22:48 UTC 2015

答案1

我一直这样做,以便在不同的 OS / VM / 服务器组合上成功工作。

您的 Apache 本身似乎没有任何问题,因此暂时忽略 Apache 配置。您需要测试整个网络路径,并考虑请求将如何通过网络从同事的计算机传输到您的 Apache 进程。通常,请求将:

Coworker -> Corporate Intranet -> Your Host OS -> VM Software -> VM Guest OS -> Apache

细分网络拓扑是解决问题的第一步,因为您必须找到请求被阻止的位置。以下是执行此操作的一些说明:

  1. 从主机所在的公司内联网开始,确保您的同事可以通过内联网 IP 物理访问您的机器。使用ipconfig /all(windows) 或ifconfig(linux) 查找您的 IP 地址。在另一台计算机上,使用ping 工具看看您的计算机是否可以访问。在弄清楚如何通过 ping 从另一台计算机访问您的计算机之前,请不要继续执行步骤 2。

  2. 我知道你可以http://[访客 IP 地址],但你能从http://127.0.0.1? 如果不能,请参阅步骤 3 来配置运行 VM 的 VM 软件。否则,请继续执行步骤 4。

  3. VM 软件管理主机操作系统和客户操作系统之间的虚拟网络层。它可能具有NAT 端口转发系统可以在主机端口 80 和客户机端口 80 之间转换 TCP 流量。但是,端口 80 通常受主机操作系统级别的主管权限保护。这使得告诉 VM 软件绑定端口 80 有点棘手,因此我建议使用端口 8080,因为它不受保护。在主机端口 8080 和客户机端口 80 之间设置 NAT 端口转发。验证您是否可以访问您的网站 @http://127.0.0.1:8080。您可能想将 Apache 设置为使用端口 8080,但这不是必需的。运行客户操作系统的 VM 软件可以将主机端口 8080 转换为客户端口 80。尝试使用 VM 网络配置,直到您获得http://127.0.0.1:8080

  4. 验证您可以从主机操作系统访问您的 Web 服务器 @http://[你的主机 ip]:8080。如果不能,请检查您的操作系统上是否运行了防火墙。首先暂时完全禁用它,然后再次测试。如果仍然无法访问网站,请返回步骤 3。如果可以,请重新启用防火墙,但一定要为您的 VM 软件提供排除,或打开端口 8080。

  5. 验证您是否可以从公司网络上的另一台计算机访问您的网站的 Web 服务器 @http://[你的主机 ip]:8080。如果不能,那么你和同事之间可能存在企业防火墙。真倒霉。也可能是你的操作系统防火墙,请再次执行第 4 步。

到此结束时,您的同事应该能够访问在您的虚拟机上运行的站点。

答案2

好吧,我找到了部分答案。

这不是网络问题。我使用数据包嗅探器发现 apache 发出的重定向包含地址“localhost/magento”,因此我的 Web 浏览器尽职尽责地查询了我自己的 Windows 计算机,该计算机返回的是 IIS 错误页面,而不是 VM 主机的 IIS。一个谜团解开了。

按照@RVT 的提示,我使用了 telnet 和 netcat,并能够从站点获取单个文件。

然后我重新安装了一个全新的 Magento 副本,并注意到 Magento 的默认安装位置是文件夹 /var/www/magento。由于其他原因,我记得我将原始文件安装到了 /var/www。因此,magento 所需的根文件夹与我将其安装到的文件夹之间存在一些不匹配。重新安装(到 .../magento)效果很好。

真正的答案可能与 Magento 的改变有关系统->常规->Web->不安全的基本 URL设置,也可能是系统->常规->Web->Url 选项设置。为了完整性,当我发现时,我会更新此答案。

答案3

由于我(还)不能发表评论来提出更具启发性的问题,因此我必须将其作为答案发布......

首先,确保你的虚拟机有一个桥接连接……简而言之,就是您本地网段上的自己的 IP 地址。根据您的描述,听起来好像它位于共享或代理连接之后,并且您的 VM 服务器可能正在提供自己的 IIS 服务。

此外,查看来自 VM 的 apache 服务器的日志文件很有用...3xx 消息很重要(即,它基本上意味着 VM 正在将您的流量发送到其他地方 - 可能是它本身重定向回 VM 服务器?)。

最后,您可以尝试从虚拟机和外部主机进入……您可以远程登录进入端口 80...并发出类似以下命令:

GET /magento HTTP/1.0
Hostname: yourhost.domain.com
\r\n

请注意,你应该翻译您的主机名.domain.com放入服务器名称中,并在主机名行后使用双换行符/回车符(即 \r\n)。返回消息的最重要部分应跟在该请求之后(即 Apache 标头)。这应该非常能说明服务器在此处实际执行的操作。

相关内容