【发布时间】:2017-05-23 04:17:01
【问题描述】:
我有一个 Nodejs 和 Angularjs 应用程序在单个 AWS EC2 实例上运行。应用程序的代码结构如下:
目前,当用户第一次调用应用程序时,调用由 nodejs express 框架处理,调用被定向到 angular 静态目录中的 index.html 页面,使用 server/server.js 中的以下代码文件
res.sendFile(path.resolve(__dirname + '/../web/dist/index.html'));
从 index.html 调用各种静态组件(JS、HTML、CSS 等),并且所有 angularjs 控制器/服务都会回调 nodejs API 以完成用户请求。
这种安排在单个实例中运行良好。现在我想移动角度静态内容(即 web 目录到 AWS S3)。在这样做时,我是否必须将 server.js 中的以下代码更改为:
res.sendFile(path.resolve('**AWS S3 URL** +/web/dist/index.html'));
因为我的静态文件现在已移至 AWS S3。此外,这样做我必须修改所有角度控制器和服务以使用 Nodejs API 调用的绝对路径。这意味着进行大量更改并引入部署配置(为了灵活性,我们必须在以后进行)。
我们可以采取的另一种方法是将 index.html 从 web 移动到服务器文件夹,方法是在 server/server.js 中进行以下更改:
res.sendFile(path.resolve(__dirname + '/../server/index.html'));
然后在 server.js 中添加以下代码来处理从 Nodejs 到 S3 的静态内容重定向,如下所示:
app.get('/assets/*', function(req, res){
var requestURL = req.url;
var redirectedURL = <<**Remote S3 base URL**>> + requestURL;
res.redirect(redirectedURL);
});
但是,担心会有很多重定向,我想知道这是否是一个好的设计?我读过搜索引擎不喜欢有大量重定向(HTTP 301、304)的应用程序,并将这些页面排名较低。因此,我试图找出在 AWS EC2 上部署 nodejs 和在 S3 上部署静态 angularjs 内容时的最佳实践。任何建议都将受到高度赞赏。
【问题讨论】:
-
不需要重定向。您应该直接从 S3 提供静态 Web 内容,这是通过将 S3 URL 用于您的资源来实现的。这也将减少服务器上的负载。
-
您是否建议应该通过浏览器直接访问 index.html(在 S3 中),而不是通过 nodejs 转发对 index.html 的调用,并更新 S3 中的所有角度控制器,绝对NodejS API URL。
标签: angularjs node.js amazon-web-services