我试图实现的是为多个网站提供来自 S3 存储桶的文件,而不显示项目的真实路径。这些文件存储在 S3 存储桶中,例如:存储桶/网站
例:
domain: domain.com
static: static.domain.com
我不想为每个网站创建 S3 存储桶,因此我想将所有文件存储在存储桶文件夹中,并使用脚本从那里提供它们。
我目前得到:
<?php
$path = "domain";
$file = "filename";
// Save a copy of the file
file_put_contents($file, fopen($path . $file, 'r'));
// Set the content type and output the contents
header('Content-Type: ' . mime_content_type($file));
readfile($file);
// Delete the file
unlink($file);
?>
但它不是那么干净,因为我保存了文件然后输出它。保存文件可能会导致混乱,因为网站可能有同名的文件。我也缺少 .htaccess 文件来进行正确的重写,因此您似乎从 static.domain.com/file 而不是 static.domain.com/script 中获取了该文件。
关于如何实现这一点的任何建议都会很棒!提前非常感谢!
配置 Apache 以将请求代理到 S3。像这样:
RewriteRule /path/to/static/files/(.*) http://my.bucket.s3.amazon.com/$1 [P]
这意味着向您的 Web 服务器请求 /path/to/static/files/foo.jpg
将导致您的 Web 服务器从my.bucket.s3.amazon.com/foo.jpg
获取文件并像直接来自您的 Web 服务器一样提供该文件。
但是,请注意,这在某种程度上否定了 S3 用于卸载流量的目的。它只是卸载存储,这很好,但是您的Web服务器仍然需要处理每个请求,并且实际上由于必须从另一台服务器获取它,因此在带宽方面有一些开销。您至少应该考虑在服务器上缓存副本,和/或在所有这些之前使用 CDN。