如何在google flex / app引擎环境中使用存储桶存储来提供静态文件?

时间:2017-01-13 09:35:42

标签: node.js google-app-engine gcloud

我有一个nodejs后端和一个reactjs前端。我正在使用gcloud flex环境(应用程序引擎),并希望使用CDN提供所有前端文件。我不希望请求触及我的nodejs服务器。我无法配置我的项目app.yaml来做同样的事情。

我怀疑我的请求不是来自CDN,因为如果我在nodejs代码中注释下面的行,我将无法再访问index.html。

app.use('/', express.static(path.resolve('./frontend/dist')));

以下是YAML文件。

handlers:
- url: /(.*\.html)
  mime_type: text/html 
  static_files: frontend/dist/\1 
  upload: frontend/dist/(.*\.html)

- url: /styles/(.*\.css) 
  mime_type: text/css 
  static_files: frontend/dist/styles/\1 
  upload: frontend/dist/styles/(.*\.css)

- url: /scripts/(.*\.js) 
  mime_type: text/javascript 
  static_files: frontend/dist/scripts/\1 
  upload: frontend/dist/scripts/(.*\.js)

- url: /images/(.*\.(bmp|gif|ico|jpeg|jpg|png)) 
  static_files: frontend/dist/images/\1 
  upload: frontend/dist/images/(.*\.(bmp|gif|ico|jpeg|jpg|png))

- url: / 
  static_files: frontend/dist/index.html 
  upload: frontend/dist/index.html

-  url: /.* 
  script: IGNORED
  secure: always

有没有办法配置应用引擎,以便静态文件请求不会对我的nodejs后端服务器做出反应?

由于

1 个答案:

答案 0 :(得分:3)

您正在将standard GAE env app.yaml elements(静态内容配置)混合到flex env app app.yaml中。

在弹性环境中提供静态内容是不同的。

基于express.static的提供静态文件的方法实际上与Serving from your application对应:

  

从您的申请中提供

     

大多数Web框架都支持提供静态文件。在这   示例,应用程序使用express.static中间件   将文件从./public目录提供给/static网址。

要在没有请求到达您的应用的情况下提供静态内容,您需要关注Serving from Cloud Storage

  

从云存储分区提供静态文件的示例

     

这个简单的示例创建了一个云存储桶并上传静态   使用Cloud SDK的资产:

     
      
  1. 创建一个存储桶。在您的项目ID之后命名您的存储桶是常见的,但不是必需的。存储桶名称必须全局唯一。

    gsutil mb gs://<your-bucket-name>
    
  2.   
  3. 设置ACL以授予对存储桶中项目的读访问权。

    gsutil defacl set public-read gs://<your-bucket-name>
    
  4.   
  5. 将项目上传到存储桶。 rsync命令通常是上传和更新资产的最快速,最简单的方法。你也可以   使用cp。

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

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

         

    有关如何使用云存储来提供静态资产的更多详细信息,   包括如何从自定义域名提供服务,请参阅How to Host a Static Website

         

    有关如何使用Cloud Storage API的更多信息   动态上传,下载和操作您的文件   申请,请参阅Using Cloud Storage