2015-04-19 145 views
3

我想在同一台服务器上运行EmberJS和Django,以避免出现跨域请求。在同一台服务器和端口上运行EmberJS和Django

所以,对于为例,我想在

exemple.com:80/api/

exemple.com:80

和Django的REST API运行EmberJS我正常启动烬使用命令ember serve --port 80,并命令python manage.py runserver 0.0.0.0:8000运行Django的。但是,这样做的两个服务器是在不同的领域,我有跨人事问题。

我该如何在同一个服务器上运行所有两个端口?

回答

3

执行此操作的最常见方法是在不同的端口上运行django和ember,并在端口80上使用反向代理将请求代理到您需要的地方。 Nginx是一个流行的选择(请参阅http://nginx.com/resources/admin-guide/reverse-proxy/)。

你想要什么比如说配置

server { 
    listen 127.0.0.1:8080; 

    location/{ 
    proxy_pass http://127.0.0.1:4200; # ember server 
    # ... additional proxy config 
    } 
    location /api { 
    proxy_pass http://127.0.0.1:8080; # django server 
    # ... additional proxy config 
    } 
} 

灰烬CLI也可以代理API请求到另一台服务器,但我不知道在生产中这样做。

+0

这样做nginx给我这个错误: nginx:[emerg] bind()到127.0.0.1:8080失败(98:地址已被使用) – Simoyw

+0

@ user3178668对不起,改变'listen 127.0.0.1:8080;到'listen 127.0.0.1:80;' – Jakeii

+0

用更改django端口到8000并且监听端口到80来解决。我还用exemple.com更改为127.0.0.1,以使外部可见的emberJs应用程序 – Simoyw

2

您遇到了内容安全策略as described in the ember-cli user guide的问题。你可以放松政策as described here,但我会建议反对这一点。

ember server命令是一种设置文件服务器以测试您的ember代码的简单方法 - 但它不适用于生产用途。请记住,Ember意味着被编译为一个JavaScript资源,您将通过后端服务器或主机通过CDN提供服务(并通过后端应用程序提供的html /模板中的脚本标记进行引用)。

Django的,这意味着你会

  1. 编译你烬应用到一个js文件
  2. put it in django's static dir
  3. 参考这个js文件索引视图
  4. 开始Django的,你通常会(但不要运行烬宝服务器)。

如果在开发模式下这太痛苦了,那么我建议您使用ember server --proxy命令。它看起来像你可以做ember server --proxy 80并在端口80上运行django,虽然this might not work out-of-the-box

+0

感谢您的建议。我会用这个来生产我想的。 随着烬服务器 - 代理80不工作.. – Simoyw

相关问题