【问题标题】:How to integrate Nodejs running on AWS EC2 and static Angularjs content on AWS S3?如何集成在 AWS EC2 上运行的 Nodejs 和 AWS S3 上的静态 Angularjs 内容?
【发布时间】:2017-05-23 04:17:01
【问题描述】:

我有一个 Nodejs 和 Angularjs 应用程序在单个 AWS EC2 实例上运行。应用程序的代码结构如下:

Code Structure

目前,当用户第一次调用应用程序时,调用由 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


【解决方案1】:

您可以通过将文件的 s3 url 添加到 index.html 中来直接从 s3 访问您的内容。

如果您也想从 s3 提供 index.html 服务,那么您必须将 index.html 一个重定向到 s3,而所有其他您可以直接从 s3 加载到浏览器。

如果您真的想快速提供公共内容,我建议您使用 cloudfront 是一个选项,您可以直接从云端提供所有公共内容,而无需访问您的节点服务器,并且所有 api 调用都会到来到您的节点服务器。但是,是的,这取决于您的应用程序的架构。

【讨论】:

  • 非常感谢您的回复。是的,最终目标是使用云端作为 CDN。
猜你喜欢
  • 2015-09-30
  • 2020-04-07
  • 2020-09-07
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 2020-04-12
相关资源
最近更新 更多