在同一台服务器和端口上运行EmberJS和Django

时间:2015-04-19 15:05:41

标签: django rest ember.js port server

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

因此,例如,我想在

上运行EmberJS
  

exemple.com:80

上的Django REST API
  

exemple.com:80/api /

我通常使用命令ember serve --port 80启动ember,使用命令python manage.py runserver 0.0.0.0:8000启动运行django。但是这样做两个服务器在不同的域上,我有跨越多曼的问题。

如何在同一个服务器上使用相同的端口运行所有两个?

2 个答案:

答案 0 :(得分: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
  }
}

Ember CLI也可以将API请求代理到另一台服务器,但我不确定是否在生产中这样做。

答案 1 :(得分:2)

您遇到了内容安全政策as described in the ember-cli user guide的问题。您可以放宽政策as described here,但我会建议不要这样做。

ember server命令是设置文件服务器以测试您的余烬代码的简单方法 - 但它不适合生产使用。请记住,Ember应编译成一个javascript资源,您可以通过后端服务器或主机通过CDN(并通过后端应用程序提供的html /模板中的脚本标记引用)来提供。

对于django来说,这意味着你会

  1. 将你的应用程序编译成js文件
  2. put it in django's static dir
  3. 在索引视图中引用此js文件
  4. 像往常一样启动django(但不要运行ember服务器)。
  5. 如果在开发模式下这太麻烦了,那么我建议使用ember server --proxy命令。看起来你可以做ember server --proxy 80并在端口80上运行django,尽管this might not work out-of-the-box