我想在同一台服务器上运行EmberJS和Django,以避免产生跨域请求。
因此,例如,我想在
上运行EmberJSexemple.com:80
和
上的Django REST APIexemple.com:80/api /
我通常使用命令ember serve --port 80
启动ember,使用命令python manage.py runserver 0.0.0.0:8000
启动运行django。但是这样做两个服务器在不同的域上,我有跨越多曼的问题。
如何在同一个服务器上使用相同的端口运行所有两个?
答案 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来说,这意味着你会
如果在开发模式下这太麻烦了,那么我建议使用ember server --proxy
命令。看起来你可以做ember server --proxy 80
并在端口80上运行django,尽管this might not work out-of-the-box。