我已经构建并部署了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