Skip to content

静态资源托管服务配置

简介

矩尺平台内置了静态资源托管能力,相当于在负载均衡中集成了一台 Web 服务器。您可以将前端页面(HTML、CSS、JS)、图片、字体、安装包等静态文件托管在矩尺平台上,通过虚拟服务直接对外提供访问,无需再单独部署 Nginx 或 Apache 来 serve 静态文件。

典型场景:

  • 将 Vue/React 前端项目打包后的 dist 目录上传,直接通过域名访问
  • 将 APP 安装包(.apk.ipa)托管在平台上供用户下载
  • 将公司官网静态页面部署到平台上,替代传统的 Web 服务器

整体流程

配置静态资源托管服务分为三步:

第一步:上传静态资源    →  把文件放到平台上(压缩包上传 或 目录映射)
第二步:配置分发规则    →  在虚拟服务中指定"处理方式 = 静态资源",选好静态资源和 URL 映射规则
第三步:验证访问        →  通过虚拟服务地址访问静态文件

前提条件:静态资源需要在 HTTP 或 HTTPS 虚拟服务上使用,这两种虚拟服务的创建方法参见 快速创建HTTP虚拟服务快速创建HTTPS虚拟服务)。

第一步:创建静态资源

入口:【SLB 本地负载 → 静态资源】,点击"新增"按钮。

矩尺平台支持两种方式提供静态文件:

方式一:压缩包上传(推荐)

将静态文件打包为 .zip.tar.gz 格式,直接上传到平台。

静态资源上传

配置项说明
名称便于识别的名称,例如 官网前端页面
上传方式选择"上传压缩包"
文件选择本地的 .zip.tar.gz 文件

上传后,平台会自动解压并展示文件目录树,您可以在目录树中:

  • 查看所有文件和文件夹结构
  • 单独上传、删除某个文件
  • 新建文件夹

静态资源目录树

高可用机制

压缩包上传后,管理节点会持久化保存。当某个转发引擎上的虚拟服务引用了该静态资源时,管理节点会自动将其同步到该转发引擎。如果转发引擎发生故障,静态资源可被重新同步到新的转发引擎,不会丢失

方式二:指定资源目录(目录映射)

不通过平台上传文件,而是直接指定转发引擎服务器上的某个本地目录作为静态资源根目录。

静态资源指定资源目录

配置项说明
名称便于识别的名称
上传方式选择"指定资源目录"
资源路径转发引擎上的目录路径,例如 /data/www/website

适用场景:

  • 静态文件已通过其他方式(如 rsync、共享存储)放在了转发引擎上
  • 需要映射 NFS 挂载的远程存储目录
  • 需要映射阿里云 OSS、NAS 等通过 ossfsmount 挂载为本地目录的远程存储

目录映射注意事项

  1. 路径必须是 Linux 绝对路径,例如 /mnt/oss-bucket/static。即使后端是阿里云 OSS 等云存储,也必须先通过工具(如 ossfs)挂载为本地 Linux 目录后,再填写挂载后的路径。
  2. 转发引擎必须有该目录的读取权限。请确保矩尺转发引擎的运行用户对该目录有 r-x 权限(至少能读文件和遍历目录)。
  3. 目录映射方式,平台不管理文件内容(文件需由您自己维护),但平台会展示文件目录树供查看。
  4. 免费版不支持指定资源目录功能。

第二步:配置静态资源参数

静态资源创建后,点击进入详情,可以配置以下参数:

静态资源配置

MIME TYPE 配置

MIME TYPE 告诉浏览器"这个文件是什么类型",浏览器据此决定如何渲染或处理文件(如直接显示图片、下载压缩包等)。

平台内置了常见文件后缀的 MIME TYPE 映射(如 .html → text/html.js → application/javascript),您也可以自定义:

静态资源MIME TYPE

  • 自定义 MIME TYPE:为特定后缀指定 MIME 类型,例如将 .apk 映射为 application/vnd.android.package-archive
  • 默认 MIME TYPE:当文件后缀在映射表中找不到时,使用此默认值。通常设为 application/octet-stream(浏览器会触发下载)

首页文件

当用户访问一个目录路径(例如 //docs/)时,平台自动返回的默认文件。不填则默认为 index.html

静态资源首页文件

预压缩功能

如果您的静态资源包中已经包含了预压缩好的 .gz.br 文件,可以开启此功能,让平台直接传输压缩文件给浏览器,由浏览器自行解压。

静态资源预压缩

配置说明
开启预压缩勾选后,平台会寻找并传输 .gz.br 后缀的预压缩文件
压缩方式选择 Gzip 或 Brotli

举例: 您的静态资源包中同时有 app.js(未压缩)和 app.js.gz(预压缩)。开启 Gzip 预压缩后,浏览器请求 app.js 时,平台直接返回 app.js.gz 的内容,并在响应头中标注 Content-Encoding: gzip。这节省了平台实时压缩的 CPU 开销

与七层压缩策略的区别

预压缩是"文件提前压好,平台直接传输";七层压缩策略是"平台收到请求后实时压缩再传输"。如果静态文件不常变化,建议使用预压缩,性能更好。

第三步:在分发规则中配置静态资源

这是最关键的一步——让虚拟服务知道"哪些请求应该走静态资源"。

创建七层分发规则

在虚拟服务的配置中(或直接进入【SLB 本地负载 → 分发规则 → 七层分发规则】),新增一条七层分发规则:

七层分发规则新增

关键配置:

配置项设置
分发策略添加一条或多条匹配规则(详见下方 URL 映射说明)
处理方式选择 "静态资源"
静态资源选择第一步创建的静态资源
映射方式选择"完全映射"或"去前缀映射"(详见下方)

注意:处理方式的选项列表中有"HTTP 代理""HTTPS 代理""重定向""静态资源""指定其他错误码"等,创建静态资源托管服务请选择**"静态资源"**。

URL 映射规则详解(重点)

当用户通过虚拟服务访问一个 URL(例如 https://example.com/static/js/app.js),平台需要将这个 URL 对应到静态资源包中的实际文件。这就是"URL 映射规则"的作用。

矩尺平台支持两种映射方式:

完全映射

URL 路径 → 文件路径,一一对应,不做任何裁切。

场景URL 请求路径静态资源包中的文件是否匹配
正确的/index.htmlindex.html(在根目录下)
正确的/css/style.csscss/style.css
错误的/www/index.htmlindex.html✗(多了前缀 /www

适用场景: 将整个域名或某个路径专门用于静态资源。比如为静态资源单独创建一个虚拟服务,监听独立端口或域名,URL 路径与文件路径完全一致。

去前缀映射

去掉 URL 中的指定前缀后,剩余部分再匹配文件路径。

前缀设置URL 请求路径去掉前缀后文件路径是否匹配
/blog/blog/index.html/index.htmlindex.html
/blog/blog/css/style.css/css/style.csscss/style.css
/blog/other/index.html✗(前缀不匹配)

适用场景: 虚拟服务同时承载 API 代理和静态资源。例如 /api/* 走 HTTP 代理到后端服务器,/blog/* 走静态资源。

复杂映射:配合分发策略使用

如果同一个虚拟服务中有多个静态资源(比如 /blog/ 走一套前端页面,/docs/ 走另一套文档页面),可以通过分发策略 + 多条分发规则实现:

规则 1(优先级高):
  分发策略:URL 路径前缀 = /blog/
  处理方式:静态资源 → 选择"博客前端页面" → 去前缀映射(前缀 = /blog)

规则 2(优先级中):
  分发策略:URL 路径前缀 = /docs/
  处理方式:静态资源 → 选择"文档前端页面" → 去前缀映射(前缀 = /docs)

默认规则(优先级低):
  处理方式:HTTP代理 → 后端服务器池

常见错误: 分发策略中的 URL 前缀没有与去前缀映射的前缀对应上,导致文件找不到。

  • 错误示例: 分发策略写的是 URL 路径前缀 = /static/,但映射方式选了"完全映射"。这样请求 /static/index.html 时,平台会在静态资源包中寻找 /static/index.html 这个文件,而不是 index.html
  • 正确做法: 要么用去前缀映射(前缀填 /static),要么分发策略直接匹配到你想要的文件路径。

配合七层策略实现 URL 重写

当映射规则特别复杂(如 URL 中包含动态参数、需要正则替换等),可以在分发规则中绑定七层 HTTP 策略,利用七层策略的"请求更改"功能在匹配静态资源之前对 URL 进行重写。

第四步:验证访问

配置完成并执行变更后,通过浏览器访问虚拟服务地址加上对应的 URL 路径进行验证。

例如虚拟服务监听 10.1.9.117:80,静态资源包中有 index.html,分发规则配置为完全映射,则可以访问:

http://10.1.9.117/index.html

如果配置了去前缀映射(前缀为 /blog),则应访问:

http://10.1.9.117/blog/index.html

配置自查清单

配置完成后,建议逐项检查以下内容,避免常见错误:

检查项√/✗
静态资源是否已上传(或目录路径是否已配置)?
目录映射方式下,转发引擎对该目录是否有读取权限?
处理方式是否选的是"静态资源"(不是 HTTP 代理)?
分发策略的匹配条件是否正确(URL 前缀 / 正则是否正确)?
映射方式是否匹配:去前缀 → 填了前缀,完全映射 → 路径一致?
如果有多个分发规则,优先级顺序是否正确?
MIME TYPE 是否配置正确(尤其是非标准文件后缀)?
首页文件是否设置(或者依赖默认的 index.html)?
变更是否已执行?

更多静态资源的详细配置(同步状态查看、文件替换、MIME TYPE 管理等)请参考用户手册 静态资源