传送静态文件

除了处理动态请求之外,应用通常还需要传送静态文件(如 JavaScript、图片和 CSS)。柔性环境中的应用可以通过 Google Cloud 选项(如 Cloud Storage)传送静态文件,直接传送或使用第三方内容分发网络 (CDN)。

从 Cloud Storage 传送文件

Cloud Storage 可为动态 Web 应用托管静态资源。与直接从应用传送内容相比,使用 Cloud Storage 进行传送可为您带来以下好处:

  • Cloud Storage 实际起到内容分发网络的作用。这不需要任何特殊配置,因为默认情况下,任何可公开读取的对象都会在全球 Cloud Storage 网络中进行缓存。
  • 将传送静态资源的工作转交给 Cloud Storage 处理,应用本身的负载将降低。根据您拥有的静态资源数量以及访问频率,这有可能大幅度降低应用的运行费用。
  • 访问 Cloud Storage 内容的带宽费用通常较低。

您可以使用 gsutil 命令行工具Cloud Storage API 将资源上传到 Cloud Storage。

Google Cloud 客户端库为 Cloud Storage 提供了惯用的 PHP 客户端,支持在 App Engine 应用中使用 Cloud Storage 存储和检索数据。

PHP 客户端还提供 API 支持的流封装容器,该流封装容器可作为专业文件系统与 Cloud Storage 交互。

从 Cloud Storage 存储分区传送文件的示例

下面这个简单的示例创建一个 Cloud Storage 存储分区,并使用 Cloud SDK 上传静态资源:

  1. 创建存储分区。通常以项目 ID 命名存储分区(并非必需)。存储分区名称必须保持全局唯一。

    gsutil mb gs://<your-bucket-name>
    
  2. 设置 ACL,授予对存储分区中内容的读取访问权限。

    gsutil defacl set public-read gs://<your-bucket-name>
    
  3. 将内容上传到存储分区。rsync 命令通常是上传和更新资源最快速、最便捷的方法。此外,您也可以使用 cp

    gsutil -m rsync -r ./static gs://<your-bucket-name>/static
    

现在,您可以通过 https://storage.googleapis.com/<your-bucket-name>/static/... 访问静态资源了。

如需详细了解如何使用 Cloud Storage 传送静态资源(包括如何从自定义域名进行传送),请参阅如何托管静态网站

从其他 Google Cloud 服务传送文件

您还可以选择使用 Cloud CDN 或其他 Google Cloud 存储服务。

直接从您的应用传送文件

从应用传送文件通常较为简单,但应注意这种方式存在以下两个弊端:

  • 针对静态文件的请求会使用本可用于动态请求的资源。
  • 从应用传送文件可能会导致响应延迟(具体取决于您的配置),还可能影响系统何时创建新实例来处理负载。

提示:在生产环境中,最佳做法一般是在应用之外单独传送静态内容,如通过 Google Cloud 或在外部使用第三方 CDN

通过应用传送静态文件的示例

PHP 运行时运行 nginx 来处理应用,其配置为传送项目目录中的静态文件。您必须通过在 app.yaml 文件中指定 document_root 来声明文档的根目录:

runtime: php
env: flex

runtime_config:
  document_root: web

从第三方内容分发网络进行传送

您可以使用任何外部第三方 CDN 传送静态文件并缓存动态请求,但您的应用可能会遇到延迟和费用增加的情况。

为了提升性能,您应该使用支持 CDN Interconnect 的第三方 CDN。