我有一些SPA,这是每个客户的一些标准仪表板,他们偶尔使用它。因此,尽管我将它们移至Amazon S3存储桶。我在这方面取得了一些成功。我托管了一个应用,将CNAME添加到了存储桶路径中,而我在那里。
我遇到了一些挑战
1)默认情况下没有SSL-通过HTTP服务
2)S3无法处理Angular路线-是吗?
因此,我继续使用CloudFront,它为我的应用提供了SSL。是! SSL取得成功,但路由没有改善。
因此,我添加了Lambda @ Edge支持,以将这些404错误转换为我的应用程序索引页面,以处理这些重新路由,但再次失败。
所以我的问题分为两部分
1)我们可以在具有SSL和路由处理功能的单个AWS存储桶中使用多个SPA吗?如果是,我想念什么?
2)迁移到AWS S3托管我的SPA甚至是个好主意。如果没有,那么我将把它们托管到单个EC2实例中。
仅供参考:我现在通过应用程序服务将这些应用程序托管在Azure中,放在单个资源组中。
答案 0 :(得分:0)
因此,我添加了Lambda @ Edge支持,以将这些404错误转换为我的应用 索引页来处理这些重新路由,但再次失败。
代替重定向,获取相关的S3 index.html并附加到Edge @ Lambda内的response.body中。
'use strict';
exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;
/**
* This function updates the response status to 200 and generates static
* body content to return to the viewer in the following scenario:
* 1. The function is triggered in an origin response
* 2. The response status from the origin server is an error status code (4xx or 5xx)
*/
if (response.status >= 400 && response.status <= 599) {
response.status = 200;
response.statusDescription = 'OK';
// Fetch the particular index.html relevant to the SPA from S3 (Based on the request path) and update the response.body
response.body = 'Body from index.html from S3';
}
// You might need to move the below callback after S3 file fetch success callback.
callback(null, response);
};
参考:Update Error Status Example
注意:重定向的问题是SPA需要知道Angular路由的完整路径才能加载该路由。但是重定向会将其替换为index.html(没有相对路径)