从另一台服务器提供静态文件,同时保持进程不可见


Serve static files from another server while keeping the process invisible

我试图实现的是为多个网站提供来自 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。