Javascript 由于Vagrant设置中的不同端口而导致跨域ajax错误

Javascript 由于Vagrant设置中的不同端口而导致跨域ajax错误,javascript,cross-domain,virtualhost,vagrant,Javascript,Cross Domain,Virtualhost,Vagrant,我正在使用以下设置开发web应用程序: Production: frontend.myapp.com appserver.myapp.com auth.myapp.com Development: localhost:8080 (frontend) localhost.com:3010 (appserver) localhost.com:3011 (auth) 前端是angularjs水疗中心,由nginx提供服务。Appserver是一个rails应用程序,它公开A

我正在使用以下设置开发web应用程序:

Production:
  frontend.myapp.com
  appserver.myapp.com
  auth.myapp.com

Development:
  localhost:8080 (frontend)
  localhost.com:3010 (appserver)
  localhost.com:3011 (auth)
前端是angularjs水疗中心,由nginx提供服务。Appserver是一个rails应用程序,它公开API(用户、项目、订单…)。Auth是另一个rails应用程序,它使用omniauth处理身份验证

在生产中,我们使用不同的子域作为虚拟主机。在开发中,我们使用不同的端口(因为在vagrant中更容易配置)

一切正常,除了一件事:angular应用程序(前端)有时需要向auth服务器发出ajax请求,这被视为跨域攻击,因为前端端口为8080,auth端口为3011。这个问题在生产中不存在,因为我们使用子域

如何防止跨域错误


一种修复方法是在开发中也使用子域。(例如,在我的主机文件中:

10.2.0.15 frontend-local.myapp.com
10.2.0.15 appserver-local.myapp.com
10.2.0.15 auth-local.myapp.com
(10.2.0.15是我的流浪机器ip)

我喜欢这个补丁,因为我的本地设置更像生产设置(使用子域而不是端口)

但是在一个流浪者重新加载我的访客(lucid32)机器的ip后,我需要再次编辑我的主机文件

我还没有找到一个方法告诉流浪汉分配一个静态IP


有什么建议吗?

访问不同的端口会发生冲突,这就是它不起作用的原因。您可以使用JSONp请求,但在生产中不需要它们。如果您设置为允许本地计算机上的每个域,怎么样?那么它至少应该在现代浏览器中起作用。

访问不同的端口会发生冲突,这就是它不起作用的原因。您可以使用JSONp请求,但在生产环境中不需要它们。如果您设置为允许本地计算机上的每个域,怎么样?那么它至少在现代浏览器中可以工作。

您设置主机文件的方法是正确的

让Vagrant为机器分配一个静态ip非常简单,请尝试以下方法:

config.vm.network :private_network, ip: "10.2.0.15"

设置主机文件的方法是正确的

让Vagrant为机器分配一个静态ip非常简单,请尝试以下方法:

config.vm.network :private_network, ip: "10.2.0.15"

我已经试过了,但是通过这个设置,我可以从vagrant机器上ping 10.2.0.15。但是我不能从主机(macOS)上ping 10.2.0.15。如果我在来宾中执行
ifconfig
,我会在自动分配的IP之外看到10.2.0.15。我不知道为什么我无法从主机ping它。我已经尝试过了,但通过此设置,我可以从vagrant机器ping 10.2.0.15。但是我无法从主机(macOS)ping 10.2.0.15。如果我在来宾中执行
ifconfig
,我会在自动分配的IP之外看到10.2.0.15。我不知道为什么我不能从主机ping它。