在同一服务器和端口上运行 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的主要内容,如果未能解决你的问题,请参考以下文章
如何在同一个端口上运行 Node Express 服务器和 Angular?
在同一个端口上运行 Angular 和 ASP.NET Web API
Telnet 在端口 (443) 上被阻止,但仍允许同一主机和端口上的 Web 服务请求