Homestead无法远程访问第二个站点

7
我有一个站点设置得很好,但第二个无法远程访问:
我的YAML:
---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: ~/Projects
  to: /home/vagrant/Projects

sites:
    - map: app.app
      to: /home/vagrant/sites/app1/public
    - map: app2.app
      to: /home/vagrant/sites/app2/public
      port: 8100

ports:
    - host: 81
    - guest: 8100

我可以轻松使用我的IP访问第一个网站-http://192.168.0.5/,但第二个无法共享同一端口,因此我添加了81 -> 8100
当我尝试重新配置我的Homestead Vagrant Box时,它会显示: 此机器的配置存在错误。请修复以下错误并重试:
vm:
* Forwarded port definitions require a "host" and "guest" value
* Ports to forward must be 1 to 65535
* Ports to forward must be 1 to 65535

任何想法?

在你的yaml文件中,你有192.168.10.10,并且可以从http://192.168.0.5/访问该网站。我认为你可能还有其他虚拟机正在运行或者其他情况。 - Frederic Henri
没有 0.5 是我的笔记本电脑本地IP的一个示例,我正在尝试从手机应用程序访问它。 - userqwert
基本上我想知道如何从远程设备访问在同一Homestead实例上运行的两个不同站点。 - userqwert
1
通常情况下,您可以通过主机host文件来管理此操作,并在VM IP上添加2个别名,每个站点名称都会访问站点而不是IP。 - Frederic Henri
是的,但是远程情况下我不能写http://app2.app,我必须写http://192.168.0.5/,然后总是得到第一个应用程序而不是第二个。难道没有用不同端口处理这个问题的方法吗? - userqwert
3个回答

4
该服务xip.io可以轻松完成此操作。以下是操作步骤:
例如,我已经设置了以下Homesite应用程序:“rentmanager.test”。这是我在Homestead上提供的第一个应用程序,因此它是默认路由。要从我的本地网络访问它,我只需执行以下操作:
http://rentmanager.test.192.168.5.124.xip.io:8000

这里的'rentmanager.test.'是我的Laravel应用程序在Homestead上的名称,'192.166.5.124.'是本地网络上我的IP地址,'xip.io:8000'是重定向服务域名和访问该应用程序(8000)所需的端口,以绕过Homestead设置的默认路由以外的路由访问应用程序。

现在,对于第一个网站的创建,这个方法可以正常使用,但如果我们有多个网站怎么办?那就需要更多的工作了。假设我们有一个名为'sitescanner.test'的第二个应用程序需要访问。如果我尝试使用新应用程序的URL访问相同的URL,你会发现我仍然被提供了第一个应用程序!我们也需要解决这个问题。

首先,您需要将一个附加规则添加到您的hosts文件中。因此,假设我们的新应用程序被称为'sitescanner.test':

# Vagrant Sites External Access

192.168.10.10 sitescanner.test.192.168.5.124.xip.io

一旦这个步骤完成,我们需要更新Homestead中的配置脚本,以创建正确的虚拟主机条目,使Homestead知道如何路由请求。为此,我们将编辑您的Homestead.yaml文件,在“sites:”指令下:

- map: sitescanner.test
  to: /home/vagrant/Code/sitescanner/public   
- map: sitescanner.test.192.168.5.124.xip.io
  to: /home/vagrant/Code/sitescanner/public 

完成这些步骤后,只需执行 'vagrant halt' 命令(如果已经在运行),然后执行 'vagrant up --provision' 命令,就能够从您的站点访问该网站。
http://sitescanner.test.192.168.5.124.xip.io:8000

您的网络中任何地方都可以!希望这有所帮助。

顺便提一下,对于这种配置还有最后一个考虑因素:

  • 如果可能的话,您可能希望在主机上设置静态IP地址。如果通过DHCP分配动态IP地址,则很可能会在分配新IP时导致此配置最终失效。

1
非常感谢Michael,这正是我所需要的!回答非常详细。 - userqwert

4
根据在https://laravel.com/docs/5.4/homestead找到的文档,当添加多个站点时,您不需要指定端口。
sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public
    - map: another.app
      to: /home/vagrant/Code/another/public

接着在您的hosts文件中添加以下内容:

192.168.10.10  homestead.app
192.168.10.10  another.app

一定要运行vagrant reload --provision


这正是我所拥有的,但我如何从我的手机访问另一个应用程序? - userqwert
如果您正在使用Mac和iPhone,可以使用一个名为SquidMan的工具进行设置。http://squidman.net/squidman/ - prola
使用Vagrant还有一种方法可以通过共享“app”将网站分享到ngrok。 - prola

0

我不知道你使用的是哪个版本的Laravel或Homestead,但这是可能的。使用为Laravel 5.6或5.7记录的Homestead版本,你已经完成了95%的工作。

  1. 在你的sites配置中,不要使用port: 8100,而应该使用port: 81
  2. 不要使用guesthost,而应该使用sendto

除了这两个区别,我使用的是与你完全相同的设置,它对我有效。

ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: ~/Projects
      to: /home/vagrant/Projects

sites:
    - map: app.app
      to: /home/vagrant/sites/app1/public
    - map: app2.app
      to: /home/vagrant/sites/app2/public
      port: 81

ports:
    - send: 8100
      to: 81

如果您的主机文件中有app2.app的条目,那么您就可以通过http://app2.app:8100访问您的应用程序;否则,您可以通过http://192.168.0.5:8100进行访问。


唯一的注意事项是:从主机上,您显然需要访问端口81上的app2.app应用程序,而不是正常默认的80端口。 - Trip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接