我有一个Angular应用程序的静态文件通过Cloudfront被存储在S3存储桶中进行服务。我的Cloudfront分配设置了错误页面,因此仍会渲染Angular的index.html。这意味着,如果我请求
我需要在应用程序服务器上包含一些安全标头,因此我设置了Lambda@Edge函数来在查看器响应事件上注入这些标头(如此处描述:https://aws.amazon.com/blogs/networking-and-content-delivery/adding-http-security-headers-using-lambdaedge-and-amazon-cloudfront/)。Lambda@Edge 对于实际对应 S3 存储桶中文件的路由有效(例如,如果我在 S3 存储桶的根目录下有一个名为
<cloudfront-distribution>.cloudfront.net/home-page
,它不会说在S3存储桶中找不到名为home-page
的文件,而是仍将渲染Angular应用程序,并且Angular应用程序将处理该/home-page
路由。我需要在应用程序服务器上包含一些安全标头,因此我设置了Lambda@Edge函数来在查看器响应事件上注入这些标头(如此处描述:https://aws.amazon.com/blogs/networking-and-content-delivery/adding-http-security-headers-using-lambdaedge-and-amazon-cloudfront/)。Lambda@Edge 对于实际对应 S3 存储桶中文件的路由有效(例如,如果我在 S3 存储桶的根目录下有一个名为
image.png
的文件,并请求 <cloudfront-distribution>.cloudfront.net/image.png
,我会看到通过 Lambda@Edge 函数注入的响应标头。问题是访问不对应 S3 存储桶中文件的路由。如果我访问 <cloudfront-distribution>.cloudfront.net/home-page
,S3 将返回 404,CloudFront 将处理 404 并根据错误页配置采取相应措施,即以 200 状态代码响应并呈现 index.html 文件。而当这种情况发生时,我没有看到通过 Lambda@Edge 函数注入的任何标头,而我的 Angular 应用程序的所有其他脚本文件都具有标头。如何使所有响应都经过 Lambda@Edge 函数?