我正在摆弄 AWS,并使用 dynamodb、api 网关和 cognito 设置了一个简单的 REST API。我使用 Node + Express 编写了 REST API。
我的 Node 应用程序位于 EB 上,基本上我使用 cognito 处理 API 网关中的请求身份验证。作为独立的,这似乎工作正常,因为我正在使用一个简单的 react 应用程序对其进行测试。
现在我正在为我的实际 React 应用程序进行服务器端渲染,所以我试图找出处理这个问题的最佳方法。对于服务器端渲染,我有另一个名为react-app-server的 Node 应用程序,我想处理API网关上的缓存并使用cloudfront来提供静态文档、图像等。
因此,如果我访问 www.mysite.com/for-sale/some-item-thats-for-sale
,此请求应首先检查该页面是否有缓存版本,然后服务它。否则,我需要让我的react-app-server渲染.html并提供/缓存它。由于有两个 Node 应用程序,api-server和react-app-server,我如何从我的api-gateway指向react-app-server来渲染html?
此场景如何适应 AWS 架构?我意识到这可能是一个非常愚蠢的问题,但我对此真的很陌生。谢谢
最佳答案
我建议您将 Cloudfront 放在所有应用程序的前面,并允许 Cloudfront 使用 Cache-Control
或您在每个 HTML 响应上返回的 Expires
header 来处理所有缓存。这将允许从 Cloudfront 边缘服务器返回所有缓存的内容,从而提高性能并简化您的应用程序。
例如,如果您的 Node 应用程序返回带有 Cache-Control: public, max-age=31536000
header 的 HTML 文档,Cloudfront 将读取该值,并从边缘服务器返回相同的 HTML 响应长达 1 年(31,536,000 秒 = 1 年)。如果您的 Node 应用程序返回带有 Cache-Control: public, max-age=3600
的 HTML 文档,Cloudfront 将读取该值并在边缘服务器上将 HTML 缓存最多 1 小时。
您可以在分配中定义两个(或更多)源,并且可以使用行为来控制每个请求将委托(delegate)给哪个源。
实际上,我今天上午刚刚写了一篇关于在 API 网关前使用 Cloudfront 的教程:https://www.codeengine.com/articles/process-form-aws-api-gateway-lambda/ 。它与您的用例并不完全相同,但如果您希望在 API Gateway 之前使用 Cloudfront,它将帮助您入门。
如果您稍微遵循一下教程,您会发现我正在处理来自 S3 存储桶的大多数请求,但将以 /rest/
开头的路径路由到 API Gateway,相信这也适合您的用例。
关于node.js - AWS后端+React前端: handling request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41419376/