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

Php 从另一台服务器提供静态文件,同时保持进程不可见,php,apache,.htaccess,amazon-s3,Php,Apache,.htaccess,Amazon S3,我试图实现的是为多个网站提供S3存储桶中的文件,而不显示项目的实际路径。文件存储在S3 bucket中,如:bucket/website 例如: domain: domain.com static: static.domain.com 我不想为每个网站创建S3存储桶,所以我想将所有文件存储在一个存储桶文件夹中,并使用脚本从那里为它们提供服务 我目前得到: <?php $path = "domain"; $file = "filename"; // Save a

我试图实现的是为多个网站提供S3存储桶中的文件,而不显示项目的实际路径。文件存储在S3 bucket中,如: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获得该文件的

任何关于如何实现这一点的建议都将非常好!非常感谢

将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。

将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。

通过PHP处理静态文件,而且通过在本地保存副本,效率极低;您最好直接从web服务器为它们提供服务。最终,web服务器确实需要处理这个问题,不要将PHP拖到其中。这意味着您的web服务器需要能够充当代理;这在有限的共享主机上是否可行是值得怀疑的。另一种选择可能是CDN。它不是共享主机,而是vps。目前,我为每个网站都有一个S3存储桶,但在这个算法中,我将在AWS上达到100个存储桶的限制,因此我有兴趣将所有文件保存在一个存储桶中。因此,您可以完全访问配置Apache(?)但您喜欢什么?那么.htaccess文件有什么问题?是的,完整的Apache配置是可用的,问题是文件不是本地的,我想隐藏一个事实,即文件来自一个bucket而不是网站静态域。通过PHP处理静态文件,而且通过在本地保存副本,效率非常低;您最好直接从web服务器为它们提供服务。最终,web服务器确实需要处理这个问题,不要将PHP拖到其中。这意味着您的web服务器需要能够充当代理;这在有限的共享主机上是否可行是值得怀疑的。另一种选择可能是CDN。它不是共享主机,而是vps。目前,我为每个网站都有一个S3存储桶,但在这个算法中,我将在AWS上达到100个存储桶的限制,因此我有兴趣将所有文件保存在一个存储桶中。因此,您可以完全访问配置Apache(?)但您喜欢什么?那么.htaccess文件有什么问题?是的,完整的Apache配置可用,问题是这些文件不是本地的,我想隐藏一个事实,即这些文件来自一个bucket而不是网站静态域。我使用CloudFlare作为CDN。我使用CloudFlare作为CDN。