如何使用存储区存储在Google Flex / App引擎环境中提供静态文件?

我有一个nodejs后端和一个reactjs前端。 我正在使用gcloud flex环境(应用程序引擎),并希望使用CDN提供所有前端文件。 我不希望这些请求触及我的nodejs服务器。 我无法configuration我的项目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 

有没有办法configuration应用程序引擎,使静态文件请求不反应我的nodejs后端服务器?

谢谢

您将标准GAE env app.yaml元素 (静态内容configuration)混合到您的Flex env应用程序app.yaml

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

基于express.static的服务静态文件的方法实际上对应于从您的应用程序服务 :

从您的应用程序服务

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

要在没有请求的情况下提供静态内容,请按照“ 从云存储服务”进行操作 :

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

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

  1. 创build一个桶。 在您的项目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/....来访问您的静态资产。

有关如何使用云端存储服务静态资产(包括如何从自定义域名提供服务)的更多详细信息,请参阅如何托pipe静态网站 。

有关如何使用Cloud Storage APIdynamic上载,下载和处理应用程序中的文件的更多信息,请参阅使用云存储 。