当前位置: 首页 > 知识库问答 >
问题:

如何在google flex/app engine环境中使用bucket存储服务静态文件?

姚浩歌
2023-03-14

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

我怀疑我的请求没有得到CDN的服务,因为如果我在我的nodejs代码中注释下面一行,我就无法再访问索引。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

有没有办法配置app engine,使静态文件请求不会对我的nodejs后端服务器做出反应?

谢谢

共有1个答案

司马晋
2023-03-14

你把标准的GAE env应用搞混了。yaml元素(静态内容配置)进入flex env应用程序应用程序。yaml

在flex环境中,为静态内容提供服务是不同的。

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

从你的申请中送达

大多数Web框架都包含对提供静态文件的支持。在这个示例中,应用程序使用express.static中间件来提供从./public目录到/静态URL的文件。

要提供静态内容而不让请求击中你的应用程序,你需要遵循云存储的服务:

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

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

>

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

    gsutil mb gs://<your-bucket-name>
    

    设置ACL以授予bucket中项目的读取权限。

    gsutil defacl set public-read gs://<your-bucket-name>
    

    将项目上传到存储桶。rsync命令通常是上传和更新资产的最快、最简单的方法。您也可以使用cp。

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

    您现在可以通过https://storage.googleapis.com/

    有关如何使用Cloud Storage为静态资产提供服务的更多详细信息,包括如何从自定义域名提供服务,请参阅如何托管静态网站。

    有关如何使用云存储API从应用程序中动态上载、下载和操作文件的更多信息,请参阅使用云存储。

  •  类似资料:
    • 问题内容: 我有一个nodejs后端和一个reactjs前端。我正在使用gcloud flex环境(应用程序引擎),并希望使用CDN提供所有前端文件。我不想让请求碰我的nodejs服务器。我无法将我的项目app.yaml配置为执行相同操作。 我怀疑CDN不能满足我的请求,因为如果我在nodejs代码中注释以下行,我将无法再访问index.html。 以下是YAML文件。 有没有一种方法可以配置应用

    • 问题内容: 有什么方法可以检查某个方法是静态调用还是在实例化对象上调用? 问题答案: 请尝试以下操作: 资料来源:通过Google的seancoates.com

    • 我从Apache切换到Nginx,使用apache,皮肤文件夹中的所有静态文件(图像、css、javascript)都直接由Apache提供服务。 示例: 我读了一些关于Nginx和Plone的文档,但我没有看到。下面是Plone.orgconf的例子:https://github.com/plone/plone-org-nginx/blob/master/nginx.conf 所以,我的问题是:

    • 我想为app Engine中的应用程序提供存储在谷歌云存储中的静态文件。在HTML文件中,我使用了 如果登录用户的谷歌帐户有访问bucket的权限,它可以正常工作。由于应用程序可以被任何人访问谁将没有访问我的桶,在这种情况下,静态文件将不会被服务。 是否有可能使bucket中的静态文件公开可用?我将静态文件(custom.css)设置为“共享公共”(ACL设置为“public-read”),但其他

    • 我有一个在谷歌应用程序引擎上运行的Django应用程序。 我希望所有对静态内容的请求将不是由Django应用程序服务,而是一个谷歌云存储桶,我已经在上面上传了应用程序需要的所有内容。 存储桶具有公共访问权限,我可以通过浏览器查看静态内容,其URL如下所示: https://www.mydjangoapp.com/static/image.jpg 将由存储提供服务:https://storage.g

    • 我在我的服务器上设置了一个1年的缓存控制。如何对AppEngine说“清楚!”要从服务器获取新版本? 配置为Flex自定义环境