2015-04-19 179 views
3

我想在同一臺服務器上運行EmberJS和Django,以避免出現跨域請求。在同一臺服務器和端口上運行EmberJS和Django

所以,對於爲例,我想在

exemple.com:80/api/

exemple.com:80

和Django的REST API運行EmberJS我正常啓動燼使用命令ember serve --port 80,並命令python manage.py runserver 0.0.0.0:8000運行Django的。但是,這樣做的兩個服務器是在不同的領域,我有跨人事問題。

我該如何在同一個服務器上運行所有兩個端口?

回答

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 
    } 
} 

灰燼CLI也可以代理API請求到另一臺服務器,但我不知道在生產中這樣做。

+0

這樣做nginx給我這個錯誤: nginx:[emerg] bind()到127.0.0.1:8080失敗(98:地址已被使用) – Simoyw

+0

@ user3178668對不起,改變'listen 127.0.0.1:8080;到'listen 127.0.0.1:80;' – Jakeii

+0

用更改django端口到8000並且監聽端口到80來解決。我還用exemple.com更改爲127.0.0.1,以使外部可見的emberJs應用程序 – Simoyw

2

您遇到了內容安全策略as described in the ember-cli user guide的問題。你可以放鬆政策as described here,但我會建議反對這一點。

ember server命令是一種設置文件服務器以測試您的ember代碼的簡單方法 - 但它不適用於生產用途。請記住,Ember意味着被編譯爲一個JavaScript資源,您將通過後端服務器或主機通過CDN提供服務(並通過後端應用程序提供的html /模板中的腳本標記進行引用)。

Django的,這意味着你會

  1. 編譯你燼應用到一個js文件
  2. put it in django's static dir
  3. 參考這個js文件索引視圖
  4. 開始Django的,你通常會(但不要運行燼寶服務器)。

如果在開發模式下這太痛苦了,那麼我建議您使用ember server --proxy命令。它看起來像你可以做ember server --proxy 80並在端口80上運行django,雖然this might not work out-of-the-box

+0

感謝您的建議。我會用這個來生產我想的。 隨着燼服務器 - 代理80不工作.. – Simoyw

相關問題