当前位置: 首页 > 面试题库 >

如何使用存储分区在Google Flex / App Engine环境上提供静态文件?

严令秋
2023-03-14
问题内容

我有一个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后端服务器做出反应?

谢谢


问题答案:

您正在将标准GAE env
app.yaml元素
(静态内容配置)混合到flex
env应用程序中app.yaml

在flex环境中,提供静态内容的方式有所不同。

express.static用于提供静态文件的基于方法实际上相当于从应用程序提供:

通过您的应用服务

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

要在没有请求到达您的应用程序的情况下提供静态内容,您需要遵循“ 从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服务静态资产(包括如何通过自定义域名提供服务)的更多详细信息,请参阅如何托管静态网站。

有关如何使用Cloud Storage API从应用程序内部动态上载,下载和操作文件的更多信息,请参阅《使用Cloud
Storage》。



 类似资料:
  • 我有一个nodejs后端和一个reactjs前端。我正在使用gcloud flex环境(应用程序引擎),并希望使用CDN服务所有前端文件。我不希望请求触摸我的nodejs服务器。我无法配置我的项目app.yaml做同样的事情。 我怀疑我的请求没有得到CDN的服务,因为如果我在我的nodejs代码中注释下面一行,我就无法再访问索引。html。 下面是YAML文件。 有没有办法配置app engine

  • 问题内容: 我有一个具有以下结构的Web应用程序: 我已经设法使用nginx和wsgi运行Web应用程序,但是问题是没有提供静态文件,我的意思是,当我转到它们的URL时,服务器找不到它们。它给我404。 这是我的nginx配置文件部分: 缺少什么吗? 问题答案: 将此添加到你的nginx配置 用你应用的绝对路径替换时,你应该注意它不包含静态目录,并且其中的所有内容都将存储在中。

  • 问题内容: 所以这很尴尬。我有一个应用程序,该应用程序已集成在一起,现在它只提供一个静态HTML页面,其中包含指向CSS和JS的链接。而且我找不到文档中描述返回静态文件的位置。是的,我可以使用,但是我知道数据没有模板化。我还以为或者是正确的事情,但我不能让这些工作。同时,我正在打开文件,阅读内容,并装配Response具有适当mimetype的: 有人要为此提供代码示例或网址吗?我知道这将变得简单

  • 我有一个Go1.11应用程序,目录如下: 和我的app.yaml: 在本地使用dev_appserver.py时,一切都可以正常工作,但部署到AppEngine后,我的所有静态资产都得到了404S。想法?

  • 问题内容: 我有一个应用程序,该应用程序已集成在一起,现在它只提供一个静态页面,其中包含指向CSS和JS的链接。而且我找不到文档中描述返回静态文件的位置。是的,我可以使用,但是我知道数据没有模板化。我还以为或者是正确的事情,但我不能让这些工作。同时,我正在打开文件,阅读内容,并装配具有适当的: 有人要为此提供代码示例或网址吗?我知道这将变得简单。 问题答案: 首选方法是使用nginx或其他Web服

  • 问题内容: 我想在localhost上的gunicorn下运行django项目。我安装并集成了Gunicorn。当我跑步时: 它可以工作,但是没有任何静态文件(css和js) 我在settings.py中禁用了debug和template_debug(将它们设置为false),但是仍然相同。我想念什么吗? 我称静态为: 问题答案: 在开发模式下以及使用其他服务器进行本地开发时,请将其添加到url.