You need to enable JavaScript to run this app.
导航
节点缓存规则
最近更新时间:2024.09.09 11:27:24首次发布时间:2024.09.09 11:27:24

本文将为您介绍如何在 veImageX 控制台配置缓存规则。

功能介绍

缓存概述

  • 在理论的缓存流程中,veImageX 在收到用户对于某个文件的第一次请求时,会向源站请求该文件。在收到该文件时,除了将文件返回给用户,veImageX 会缓存该文件。这样,对于未来该文件的请求,veImageX 会直接将缓存中的文件返回给用户,实现传输加速。

  • 在实际的缓存流程中,根据用户请求以及源站响应的情况,veImageX 会有不同的缓存行为。同时,您还可以通过创建缓存规则来控制 veImageX 的缓存行为。关于 veImageX 如何判断是否需要缓存某个文件,参见判断文件是否需要缓存的流程

每个缓存的文件都有一个过期时间。如果缓存的文件达到了过期时间,veImageX 会判定该文件已过期。之后,如果收到了该文件的请求,veImageX 校验缓存文件在源站是否有更新。根据校验结果,veImageX 再判断是否需要更新缓存。参见过期缓存文件的回源校验流程

缓存规则概述

在 veImageX 中,您可以通过创建缓存规则来控制 veImageX 的缓存行为。在缓存规则中,您可以指定以下内容:

  • 缓存规则所生效的文件。
  • 缓存策略。
  • 缓存的过期时间。

veImageX 按照规则的优先级来匹配用户请求。如果匹配到一条规则,veImageX 将不再匹配后续规则。

说明

您可以修改或者删除已有的缓存规则。但是在您操作前,您必须了解操作带来的影响。参见变更缓存规则的影响

文件不缓存的情况

在以下情况中,veImageX 不对请求的文件进行缓存。

  • 源站响应头中 Content-Length 的字段值为 0
  • 请求的方法既不是 GET 也不是 HEAD
  • 对于 HEAD 请求,源站响应头包含 Transfer-Encoding:chunked

强制更新缓存

假设 veImageX 缓存了某个文件。该缓存文件还未过期,但是在源站上该文件已经有了更新。您需要用户能获取到该文件的最新版本。

此时,如果您需要清除该文件的缓存,您可以对该文件使用刷新操作。刷新后,如果用户请求该文件,veImageX 会向源站请求该文件并更新缓存。

操作步骤

  1. 登录 veImageX 控制台

  2. 选择 服务管理 > 基础配置 > 配置 > 缓存配置,进入缓存配置页面。

  3. 选择节点缓存规则配置,单击编辑按钮,参考下表完成缓存规则配置。

    配置项说明
    优先级表示规则的优先级。如果有多条规则,则按优先级来执行规则。您可以通过拖拽调整规则的优先级。

    规则类型

    选择一个缓存规则的类型。

    • 文件后缀:缓存规则应用于特定后缀名的所有文件。
    • 目录匹配:缓存规则应用于特定目录下的所有文件。
    • 文件全路径匹配:缓存规则应用于特定文件。

    规则内容

    根据指定的 规则类型,输入规则的内容。规则内容不能超过 1024 个字符。你可以输入一个或者多个配置,多个配置以英文分号(;)分隔。 规则内容的要求如下:

    • 如果类型是 文件后缀,需要输入一个或者多个文件后缀。比如 xlsx 或者 png;txt。文件后缀可以包含英文字母和数字。
    • 如果类型是 目录匹配,需要输入一个或者多个目录路径。目录路径必须以反斜杠(/)开头和结尾。比如 /www/img/volc/;/www/doc/。目录路径不能包含连续斜杠(//)、百分号(%)、空格。如果要指定加速域名下的所有目录,输入 /。
    • 如果类型是 文件全路径匹配,需要输入一个或者多个文件路径。文件路径必须以 / 开头。比如 /www/img/volcano.png;/doc/study.docx。文件路径不能包含连续斜杠(//)、百分号(%)、空格。
    • 如果类型是 全路径正则表达式,需要输入一个正则表达式。例如在 URL https://www.example.com/path/to/file.html ,您想对 /path/to/ 开头的文件路径使用缓存。您可配置的正则表达式为:^\/path\/to\/file\.html$

    忽略大小写

    在使用 规则 匹配用户请求的文件时是否区分大小写。请求 URL 的其余部分不受该配置影响。关闭表示区分大小写。
    示例:对于文件后缀规则,您设置 忽略大小写 为关闭。您输入的规则内容是 png;txt。此时,该规则可以匹配 HTTPS://www.EXAMPLE.com/volcano.png,但是不能匹配 https://www.example.com/volcano.PNG。

    缓存时间

    指定一个时间单位并输入缓存的时间。您可以指定的最长时间是 10年。

    • 如果您指定的时间单位是 ,取值范围为 [0,315360000]。
    • 如果您指定的时间单位是 ,您可以输入的最大时间是 [0,5256000]。
    • 如果您指定的时间单位是 小时,您可以输入的最大时间是 [0,87600]。
    • 如果您指定的时间单位是 ,您可以输入的最大时间是 [0,3650]。

    如果您指定缓存时间为 0,则表示不缓存匹配的文件。缓存时间是 0 的规则建议放在缓存规则列表中的第一条。

判断文件是否需要缓存的流程

veImageX 按照以下列表项的顺序处理响应头字段。如果响应头匹配一个列表项,veImageX 就不再处理其余列表项。

  1. 如果源站响应头中包含 Cache-Control: no-storeCache-Control: private。此时,该文件不被缓存。

  2. 如果源站响应头中包含 Cache-Control: max-age,此时:

    • 如果该字段的值 >= 0,该文件被缓存。文件的缓存过期时间 = 当前时间 + 该字段指示的时间。
    • 如果该字段的值 < 0,该文件不被缓存。
  3. 如果源站响应头中包含 Expires,此时:

    • 如果该字段的值 < 当前时间,该文件不被缓存。
    • 如果该字段的值 >= 当前时间,该文件被缓存。文件的缓存过期时间 = 该字段指示的过期时间。

过期缓存文件的回源校验流程

缓存文件过期

veImageX 判定缓存的文件为过期的情况如下:

  • 缓存文件达到了该文件的过期时间。
  • 在 veImageX 根据用户请求向源站请求文件时,源站的响应头中包含 cache-control: no-cache 或者 Cache-Control: max-age=0。在该情况下,虽然 veImageX 会缓存该文件,但是veImageX 判定该文件已过期。

回源校验流程

缓存文件过期后,如果收到了文件的请求,veImageX 会向源站校验该缓存文件是否有更新。回源校验的流程如下:

  1. 如果缓存文件的源站响应头包含 Last-Modified 字段或者 ETag 字段,veImageX 会在回源请求头中包含文件校验字段。ETag 的优先级高于 Last-Modified

    • 如果 ETag 字段存在,请求头中会包含 If-None-Match 这个校验字段。该字段的值就是 ETag 的值。
    • 如果 ETag 不存在但是 Last-Modified 存在,请求头中会包含 If-Modified-Since 这个校验字段。该字段的值就是 Last-Modified 的值。

    对于源站的响应状态码:

    • 如果状态码是 304,表示文件在源站没有更新。此时,veImageX 不更新缓存文件,直接将缓存文件返回给用户。如果之后再次收到了文件的请求,veImageX 会重复执行回源校验流程。
    • 如果状态码是 200,表示文件在源站有更新并且响应中包含了最新的文件。此时,veImageX 会根据判断文件是否需要缓存的流程处理该文件。
  2. 如果缓存文件的源站响应头没有包含 Last-ModifiedETag 字段,回源请求头中不会包含文件校验字段。在veImageX 收到源站响应后,根据判断文件是否需要缓存的流程处理响应中包含的文件。

变更缓存规则的影响

假设一个文件请求匹配了某条缓存规则而被veImageX 缓存,并且该缓存文件还未过期。此时,如果您修改或者删除了该缓存规则,veImageX 会根据判断文件是否需要缓存的流程刷新该缓存文件的过期时间。

如果该缓存文件不匹配任何规则,并且该缓存文件的源站响应头不包含 Cache-Control: max-ageExpires,那么 veImageX 会按以下方式处理该缓存文件:

  • 如果该缓存文件的源站响应头包含 Last-Modified 字段,veImageX 会基于 Last-Modified 计算一个时间。该文件的缓存过期时间 = 当前时间 + 计算的缓存时间。

  • 如果 计算结果 <= 当前时间,则 veImageX 判定该文件已过期。

  • 如果 计算结果 > 当前时间,则 veImageX 判定该文件未过期。如果用户请求该文件,veImageX 会将缓存的文件返回给用户。此时,如果您需要清除该文件的缓存,您可以对该文件使用刷新操作。刷新后,如果用户请求该文件,veImageX 会向源站请求该文件。

  • 如果该缓存文件的源站响应头不包含 Last-Modified 字段,veImageX 判定该文件已过期。

如果该缓存文件已过期,在收到该文件的请求时,veImageX 会遵循过期缓存文件的回源校验流程

基于 Last-Modified 计算缓存时间

计算 (当前时间 - Last-Modified)* 0.1。单位为秒。

  • 如果 计算结果 < 1小时,缓存时间是 1小时。
  • 如果 1小时 <= 计算结果 <= 1天,缓存时间是实际的计算结果。
  • 如果 计算结果 > 1 天,缓存时间是 1天。