我已經構建並部署了Play Framework + AngularJS應用程序,發現nginx是一個很好的方法。
隨着您的應用程序體系結構的發展,Nginx還爲您提供了一條增長途徑來處理更多服務。例如,您可以爲/api/user/*
添加專用服務,同時保留所有其他/api/*
路線的標準服務。
在某些時候,你可能需要去商業產品,但爲了我現在和可預見的將來的需要,nginx是驚人的。
我nginx的配置的相關部分是:
server {
listen 80;
# Without this, Play serves the assets from within it's bundled jar. That's
# fine and works but seems unnecessary when nginx can serve the files directly.
location /assets {
alias /app/live/my-play-app-here/active/public;
}
location/{
proxy_pass http://localhost:9000;
proxy_set_header X-Real-IP $remote_addr;
}
}
這裏的關鍵部分是/assets
URI空間。你的可能會有所不同,因爲你完全獨立地打包你的AngularJS應用程序。我的角度應用程序位於Play應用程序的/app/assets/javascripts
文件夾內。這有利有弊(我很喜歡你的想法,保持它完全分開)。我對/assets
塊所做的工作允許nginx直接提供靜態內容,因爲當nginx做得很好時,Play似乎很愚蠢。
這不是在您的情況,但對別人有戲中的一切,對上述服務靜態資產戰略工作,部署過程需要解壓從存檔的public
目錄由play dist
做,像這樣有關這(從我的bash部署腳本摘錄):
unzip lib/$SERVICE_BASE_NAME.$SERVICE_BASE_NAME-$VERSION.jar "public/*"
爲您的特定情況下,像下面可能是一個良好的開端:
server {
listen 80;
location /api {
proxy_pass http://localhost:9000;
proxy_set_header X-Real-IP $remote_addr;
}
location/{
alias /app/live/my-angularjs-app-here/active/public;
}
}
+1上nginx的。我們使用Play + EmberJS。儘管如此,關於OP的URL方法的評論之一。您可以考慮分隔您的公共Web界面(例如域名)使用的主機名。com)和您的API(例如api.domain.com)。另外,如果你這樣做,一個頭與nginx。您需要設置CORS標頭以允許domain.com使用在api.domain.com上調用URL的JavaScript。另請參閱'headers_more' nginx模塊來正確設置它。 – 2014-10-12 15:37:48
這對我來說就像一個魅力,有一些陷阱。 '咕嚕',我似乎有一種困擾的關係 - 我遇到了嚴重的問題,並且我幾乎總是以一個破損的包裹結束。但這並不是一個嚴重的問題,因爲我手動將缺少的組件複製到'dist /'文件夾。我稍後通過將靜態符號鏈接添加到'dist'中缺失的文件夾來解決此問題。 – Ashesh 2014-10-15 15:06:26