我有一个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后端服务器做出反应?
由于
答案 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的资产:
创建一个存储桶。在您的项目ID之后命名您的存储桶是常见的,但不是必需的。存储桶名称必须全局唯一。
gsutil mb gs://<your-bucket-name>
设置ACL以授予对存储桶中项目的读访问权。
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/<your-bucket-name>/static/....
有关如何使用云存储来提供静态资产的更多详细信息, 包括如何从自定义域名提供服务,请参阅How to Host a Static Website。
有关如何使用Cloud Storage API的更多信息 动态上传,下载和操作您的文件 申请,请参阅Using Cloud Storage。