我正在用这个设置开发一个 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 是一个公开 apis(用户、项目、订单等)的 rails 应用程序。Auth 是另一个使用 omniauth 处理身份验证的 rails 应用程序。
在生产中,我们使用不同的子域作为虚拟主机。在开发中,我们使用不同的端口(因为在流浪中更容易配置)。
一切正常,除了一件事:角度应用程序(前端)有时需要向身份验证服务器发出 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 会发生变化,我需要再次编辑我的主机文件......
而且我还没有找到一种方法来告诉流浪汉分配一个静态 IP......
有什么建议吗?
访问不同的端口违反了同源策略,这就是它不起作用的原因。您可以使用 JSONp 请求,但在生产中不需要它们。如果将访问控制允许源设置为允许本地计算机上的每个域,该怎么办?那么它至少应该在现代浏览器中工作。
您在设置主机文件方面走在正确的轨道上。
让Vagrant为机器分配一个静态ip非常容易,试试这个:
config.vm.network :private_network, ip: "10.2.0.15"