动态选择要由 CloudFront 提供服务的 S3 对象

Dynamically choose an S3 object to be served by CloudFront

是否可以让自定义源服务器告诉 CloudFront 直接从 S3 存储桶提供文件,类似于 X-Sendfile 在 Nginx 中的工作方式?我想避免必须从 S3 读取文件并将其通过管道传输到 CloudFront。

不,这不可能。

一旦请求从 CloudFront 发送到源服务器,只有 CloudFront 会做的事情(当然,除非发生错误)是 return 源服务器对请求者的响应。

我想到的唯一真正可行的方法是 CloudFront 遵循 HTTP 重定向,it does not do

如果您想要 return 在请求到达来源后从其他地方获取内容,您将必须获取它并将其流式传输回来...这可能会比您预期的更好,如果该存储桶与源服务器位于同一区域,并且您的代码很紧凑。区域内 S3 的延迟非常低,可用带宽很高。我有一个应用程序就是这样做的,每天在一个小的 t2 实例上执行数千次,所以它当然可行。

当然,对于单个 CloudFront 分配,您可以有多个来源——例如您的服务器和 S3。 CloudFront 可以根据路径模式匹配选择哪个源将处理每个请求...但这是一个静态映射,所以我不知道它是否适用于您正在尝试做的事情。