我想要实现的是为多个网站提供来自S3存储桶的文件而不显示项目的真实路径。这些文件存储在S3存储桶中,如:bucket / website
示例:
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。
关于如何实现这一点的任何建议都会很棒!非常感谢提前!
答案 0 :(得分:5)
将Apache配置为proxy the request到S3。类似的东西:
RewriteRule /path/to/static/files/(.*) http://my.bucket.s3.amazon.com/$1 [P]
这意味着对您的网络服务器/path/to/static/files/foo.jpg
的请求将导致您的网络服务器从my.bucket.s3.amazon.com/foo.jpg
获取文件,并将其作为直接来自您的网络服务器的服务。
然而,请注意,这有点否定了S3的意图,以便卸载流量。它只是卸载了存储,这很好,但是你的Web服务器仍然需要处理每一个请求,实际上由于必须从另一个服务器获取它而在带宽方面有一些开销。你应该至少调查caching a copy on-server,和/或在所有这些之前使用CDN。