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

Posted

技术标签:

【中文标题】在同一服务器和端口上运行 EmberJS 和 Django【英文标题】:Run EmberJS and Django on the same server and port 【发布时间】:2015-06-26 05:14:20 【问题描述】:

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

如何在同一台服务器上以相同端口运行所有两个?

【问题讨论】:

【参考方案1】:

最常见的方法是在不同的端口上运行 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 请求代理到另一台服务器,但我不确定在生产中是否这样做。

【讨论】:

做这个 nginx 给我这个错误: nginx: [emerg] bind() to 127.0.0.1:8080 failed (98: Address already in use) @user3178668 抱歉,请将listen 127.0.0.1:8080; 更改为listen 127.0.0.1:80; 解决了将 django 端口更改为 8000 并将侦听端口更改为 80。此外,我使用 exemple.com 更改为 127.0.0.1 以使 emberJs 应用程序从外部可见【参考方案2】:

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

ember server 命令是一种设置文件服务器来测试您的 ember 代码的简单方法 - 但它不适用于生产用途。请记住,Ember 旨在编译成 javascript 资产,您将通过后端服务器或通过 CDN 托管(并通过后端应用所服务的 html/模板中的脚本标记进行引用)。

对于 django,这意味着你会

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

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

【讨论】:

感谢您的建议。我认为我会将其用于生产。使用 ember server --proxy 80 不起作用..

以上是关于在同一服务器和端口上运行 EmberJS 和 Django的主要内容,如果未能解决你的问题,请参考以下文章

如何在 EmberJS 应用程序中启用 CORS?

如何在同一个端口上运行 Node Express 服务器和 Angular?

在同一个端口上运行 Angular 和 ASP.NET Web API

Telnet 在端口 (443) 上被阻止,但仍允许同一主机和端口上的 Web 服务请求

如何使用 docker 和 nginx 在同一台服务器上运行多个站点?

Nodejs HTTP 和 HTTPS 在同一个端口上