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

时间:2016-01-22 08:49:14

标签: php apache .htaccess amazon-s3

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

关于如何实现这一点的任何建议都会很棒!非常感谢提前!

1 个答案:

答案 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。