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

Run EmberJS and Django on the same server and port

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

所以,例如,我想 运行EmberJS on

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。但是这样做两个服务器在不同的域上,我有跨域问题。

我怎样才能 运行 在同一服务器上使用相同的端口将所有这两个都做到?

最常见的方法是 运行 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 请求代理到另一台服务器,但我不确定是否可以在生产环境中执行此操作。

您 运行 遇到内容安全策略的问题 as described in the ember-cli user guide. You could relax the policy as described here,但我建议您不要这样做。

ember server 命令是设置文件服务器以测试您的 ember 代码的简单方法 - 但它不适用于生产用途。请记住,Ember 旨在编译成 javascript 资产,您将通过后端服务器或通过 CDN 主机提供服务(并通过 html/template 中的脚本标记引用您的后端应用服务)。

对于 django,这意味着你会

  1. 将您的ember应用程序编译成js文件
  2. put it in django's static dir
  3. 在您的索引视图中引用此 js 文件
  4. 像往常一样启动 django(但不要 运行 ember 服务器)。

如果在开发模式下这样做太痛苦,那么我建议使用 ember server --proxy 命令。看起来你可以在端口 80 上执行 ember server --proxy 80 和 运行 django,尽管 this might not work out-of-the-box.