【问题标题】:Apache Virtual Host configuration to serve static files from S3 bucket用于从 S3 存储桶提供静态文件的 Apache 虚拟主机配置
【发布时间】:2017-09-18 16:54:15
【问题描述】:

我需要为我的 apache 虚拟主机实现以下逻辑:

  • 如果文件存在于 S3 存储桶中,则从那里提供它
  • 否则将请求发送到 fastcgi 服务(此特定用例中为 php-fpm)

通过 php 提供 S3 文件是不可接受的,我们不能将 s3 存储桶映射为 apache 的文件夹。

所以,问题是:是否有已知的方法可以从虚拟主机配置中检查 S3 存储桶中的文件是否存在(如果不是,则为 403/404 错误)并基于此实现逻辑?

【问题讨论】:

  • 我不认为 Apache 可以做到这一点 - 你需要一些代码。您不需要使用 PHP 来提供文件本身 - 生成签名 URL 并将用户重定向到该新 URL。
  • 如果您使用 s3 静态网站托管,那么绝对可以使用 proxy_pass 从 s3 获取这些资源。至于 403/404 周围的逻辑,我敢肯定有办法,但是伙计,这变得很棘手......

标签: apache amazon-s3


【解决方案1】:

你说你想:

  • 如果文件存在于 S3 存储桶中,则从那里提供它
  • 否则将请求发送到 fastcgi 服务(此特定用例中为 php-fpm)

虽然我可以想象能够在 Apache 中完全配置它可能会更方便,但我建议这可能会更好:

  • 始终向 fastcgi 服务 (php-fpmIf) 发送请求
  • 让服务检查文件是否存在于 S3 中
  • 如果文件存在,则服务返回 S3 文件(或重定向到文件)。
  • 否则服务会处理请求并生成结果

亚马逊提供了一个使用 PHP 访问 S3 的 SDK:

https://docs.aws.amazon.com/aws-sdk-php/v2/guide/service-s3.html https://docs.aws.amazon.com/AmazonS3/latest/dev/RetrieveObjSingleOpPHP.html

对于您要求的方法,有一个已回答的 SO 问题如何处理 PHP 中的 403 错误:

how to handle a 403 error with PHP

【讨论】:

    猜你喜欢
    • 2013-08-22
    • 2021-02-16
    • 2019-02-19
    • 2014-04-23
    • 2018-10-31
    • 2011-05-04
    • 2017-06-14
    • 2012-08-22
    相关资源
    最近更新 更多