2

我正在使用此设置开发一个 Web 应用程序:

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

Development:
  localhost:8080 (frontend)
  localhost.com:3010 (appserver)
  localhost.com:3011 (auth)

Frontend 是一个与 nginx 一起服务的 angularjs SPA。Appserver 是一个公开 api(用户、项目、订单...)的 Rails 应用程序。Auth 是另一个使用omniauth 处理身份验证的rails 应用程序。

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

一切正常,除了一件事:Angular 应用程序(前端)有时需要向身份验证服务器发出 ajax 请求,这被认为是跨域攻击,因为前端端口是 8080,身份验证端口是 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会改变,我需要再次编辑我的主机文件......

而且我还没有找到一种方法来告诉 vagrant 分配静态 IP ......

有什么建议么?

4

2 回答 2

4

访问不同的端口违反了Same Origin Policy,这就是它不起作用的原因。您可以使用 JSONp 请求,但在生产中不需要它们。如果您将Access-Control-Allow-Origin设置为允许本地计算机上的每个域怎么样?那么它至少应该在现代浏览器中工作。

于 2013-11-05T16:32:22.070 回答
0

您在设置主机文件方面处于正确的轨道上。

让 Vagrant 为机器分配一个静态 ip 非常简单,试试这个:

config.vm.network :private_network, ip: "10.2.0.15"
于 2013-11-05T22:49:06.533 回答