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

在同一服务器和端口上运行EmberJS和Django,django,rest,ember.js,port,server,Django,Rest,Ember.js,Port,Server,我想在同一台服务器上运行EmberJS和Django,以避免跨域请求 例如,我想在上运行EmberJS example.com:80 和Django REST API example.com:80/api/ 我通常使用命令ember-serve--port 80启动ember,并使用命令python manage.py runserver 0.0.0.0:8000运行django。但这样做的两个服务器是在不同的域,我有跨域的问题 如何在具有相同端口的同一服务器上运行这两个服务器?最常见的方法是在

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

例如,我想在上运行EmberJS

example.com:80

和Django REST API

example.com:80/api/

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


如何在具有相同端口的同一服务器上运行这两个服务器?

最常见的方法是在不同的端口上运行django和ember,并在端口80上使用反向代理将请求代理到需要它们的位置。Nginx是一种流行的选择(请参阅)

您想要的配置示例

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请求代理到另一台服务器,但我不确定是否要在生产环境中执行此操作。

您在内容安全策略方面遇到了问题。你可以放宽政策,但我建议不要这样做

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

对django来说,这意味着

  • 将你的余烬应用程序编译成一个js文件
  • 在索引视图中引用此js文件
  • 像平常一样启动django(但不要运行ember服务器)

  • 如果在开发模式下这样做太痛苦,那么我建议使用
    ember服务器--proxy
    命令。看起来您可以执行
    ember server--proxy 80
    并在端口80上运行django,不过。

    执行此操作nginx会出现以下错误:nginx:[emerg]bind()到127.0.0.1:8080失败(98:地址已在使用)@user3178668抱歉,更改
    listen 127.0.0.1:8080
    听127.0.0.1:80通过将django端口更改为8000并将侦听端口更改为80解决。此外,我还使用example.com将emberJs应用程序从外部可见,从而更改为127.0.0.1。感谢您的建议。我想我会把它用于生产。对于ember服务器--代理80不起作用。。