我正在尝试使用VM来让我和公司的其他人来testing对Magento商店的更改。 虚拟机不在我的控制之下(主要是),并驻留在我们的Intranet上的Windows服务器框中。 我不知道版本的详细信息或实际使用的虚拟机,但我可以得到这个信息,如果需要的话。 我创build了一个Ubuntu VM,安装了Magento(v1.8)。 我从我的网上商店备份,并恢复到这个虚拟机。 如果我呆在虚拟机中,这一切都可以运行(对我所做的来说足够好)。
问题是,我无法从虚拟机外部访问虚拟机上托pipe的商店。
位置/var/www包含默认的apache index.html。 该商店位于.../var/www/magento
如果我只是把浏览器(从虚拟机外部)指向虚拟机的IP地址,我会得到Apache的默认index.html。 如果我查看apache access.log,我会看到您希望看到的正常消息。 大! 如果我把浏览器指向“/ magento”,我得到VM主机的IIS默认网页! apache访问日志显示它返回了一些redirect(301,302)错误代码(我对此不是很熟悉)。
哦,我尝试将Apache的DocumentRoot移动到/var/www/magento并且遇到了其他一些问题,所以我把它放回去了。
如果这是虚拟机主机的问题,你能给我指针,让我可以得到适当的人参与? 我究竟做错了什么?
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
我一直在不同的操作系统/虚拟机/服务器组合上成功地工作。
Apache自身似乎没有什么问题,所以现在忽略Apacheconfiguration。 您需要testing整个networkingpath,并考虑请求将如何通过networking从同事的计算机传输到您的Apache进程。 一般来说,请求将会执行:
Coworker -> Corporate Intranet -> Your Host OS -> VM Software -> VM Guest OS -> Apache
细分networking拓扑是解决问题的第一步,因为您必须find请求被阻止的位置。 这里有一些说明:
从您的主机所在的企业内部网启动,确保您的同事可以在您的内部网IP上物理访问您的机器。 使用ipconfig /all (windows)或ifconfig (linux)查找您的IP地址。 在另一台计算机上,使用ping工具查看您的计算机是否可以访问。 不要继续进行第2步,直到找出如何通过ping从另一个ping到您的计算机。
我知道你可以访问http:// [guest-ip-address] ,但是你可以访问你的虚拟机网站http://127.0.0.1 ? 如果不能,请参阅步骤3以configuration运行VM的VM软件。 否则,继续步骤4。
VM软件pipe理主机操作系统和客户操作系统之间的虚拟networking层。 它可能会有一个NAT端口转发系统 ,可以转换主机端口80和访客端口80之间的TCP通信。但是,端口80通常受到主机操作系统级别的pipe理员权限的保护。 这使得虚拟机软件绑定端口80有点棘手,所以我build议使用端口8080,因为它是不受保护的。 设置主机端口8080和访客端口80之间的NAT端口转发。确认您可以访问您的网站@ http://127.0.0.1:8080 。 您可能会试图将Apache设置为使用端口8080,但这不是必需的。 运行您的客户操作系统的虚拟机软件可以将主机端口8080转换为客户端口80.使用虚拟机networkingconfiguration播放,直到获得http://127.0.0.1:8080 。
确认您可以从主机操作系统@ http:// [your-host-ip]:8080中启动您的Web服务器。 如果不能,请检查您的操作系统上是否运行了防火墙。 首先完全暂时禁用它,然后再次testing。 如果仍然无法访问网站,请返回步骤3.如果可以,请重新启用防火墙,但一定要给您的虚拟机软件排除,或打开端口8080。
确认您可以从您的公司networking@ http:// [your-host-ip]:8080上的另一台计算机上访问您的网站服务器。 如果你不能,你和你的同事之间可能会有一个企业防火墙。 游民。 它也可能是您的操作系统防火墙,再次执行步骤4。
到此为止,您的同事应该能够访问虚拟机上运行的站点。
那么我发现了答案的一部分。
这不是networking问题。 我使用了一个数据包嗅探器来发现从apache发出的redirect包含地址“localhost / magento”,所以我的浏览器忠实地查询了我自己的Windows机器,它返回了IIS错误页面,而不是虚拟机的主机的IIS。 一个谜解决了。
在@RVT的带领下,我使用了telnet和netcat,并能够从网站获取单个文件。
然后,我重新安装了Magento的全新副本,并注意到Magento安装到的默认位置是文件夹/ var / www / magento。 由于其他原因,我记得我安装了原始的/ var / www。 所以magento想要的根文件夹和我安装的文件夹之间有一些不匹配的地方。 重新安装(到… / magento)完美地工作。
真正的答案可能与Magento的System-> General-> Web-> Unsecure Base URL设置的变化有关,也可能是System-> General-> Web-> Url Option设置。 为了完整,当我发现我会更新这个答案。
由于我不能(但)评论问更多的照明问题,我不得不张贴这个答案…
首先,确保你的虚拟机具有桥接连接…总之,在你的本地网段上有自己的IP地址。 从您的描述来看,这听起来像是在共享或代理连接之后,而您的VM服务器可能正在提供自己的IIS服务。
另外,从虚拟机的apache服务器上查看日志文件是很有用的… 3xx消息是重要的(也就是说,它基本上意味着虚拟机正在将您的stream量发送到其他地方 – 是否可以将它redirect回虚拟机服务器,本身?)。
最后,你可以尝试从虚拟机和外部主机进入…你可以telnet到端口80 …并发出命令类似于:
GET /magento HTTP/1.0 Hostname: yourhost.domain.com \r\n
请注意,您应该将yourhost.domain.com翻译为服务器名称,并在主机名行(即\ r \ n)之后使用双重换行符/回车符。 返回消息中最重要的部分应该遵循这个请求(即Apache头文件)。 这应该是相当明亮的服务器实际上在做什么,在这里。