我可以在使用 CloudFront CDN 进行 GET 请求时反向代理 POST 请求吗?

Can I reverse-proxy POST requests while using CloudFront CDN for GET requests?

目前,我有 CloudFront 分发服务来自 S3 存储桶的 SPA (spa.myapp.com)。我还在 AWS 上的 k8s 中部署了 Web 服务器。

  1. 是否可以将所有 POST spa.myapp.com/* 请求转发到我的网络服务器?我需要哪些组件/配置来执行此操作?

  2. 是否可以将所有 spa.myapp.com/api/* 请求转发到我的网络服务器(无论使用何种 http 方法)?我需要哪些组件/配置来执行此操作?

通常我想从 CDN 提供 SPA,但在同一域中也有几个服务器端端点。

  1. * 路径的 CloudFront 行为中,您应该允许所有类型的方法:

来自docs

CloudFront always caches responses to GET and HEAD requests. You can also configure CloudFront to cache responses to OPTIONS requests. CloudFront does not cache responses to requests that use the other methods.

这意味着 POST 请求总是被重定向到源 (back-end),对这些请求的响应不会被缓存。如果缓存未命中,GETHEAD 请求也可能被重定向。否则,返回缓存中的数据。

  1. 创建 CloudFront 分配时,必须将行为设置为默认。通常,您保留默认路径模式,因此 *:

你可以有多个行为,它们可以有不同的缓存属性。这些行为通过它们的路径模式来区分。它们也可以有优先级,传入的请求首先根据更高优先级的行为进行评估。例如:

要回答您的问题,您必须为 /api/* 路径创建不同的行为并为此行为应用不同的配置。与默认行为相比,这必须具有更高的优先级。请记住,CloudFront 仅缓存 GETHEADOPTIONS 请求。