• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • mod_cache

    描述:符合 RFC 2616 的 HTTP 缓存过滤器。
    状态:延期
    模块标识符:cache_module
    源文件:mod_cache.c

    摘要

    应该小心使用此模块,因为当CacheQuickHandler指令在的默认 value 中时,允许和拒绝指令将被绕过。您不应为要通过 client host name,address 或 environment 变量限制访问的任何内容启用快速处理程序缓存。
    mod_cache实现符合RFC 2616的HTTP 内容缓存过滤器,支持缓存包含 Vary 头的内容协商响应。

    符合 RFC 2616 的缓存提供了一种机制来验证陈旧或过期的内容是否仍然新鲜,并且当原始服务器通过尊重If-None-Match HTTP 请求标头支持条件请求时,可以表示显着的性能提升。内容仅在内容更改时从头开始重新生成,而不是在缓存条目到期时重新生成。

    作为过滤器,mod_cache可以放在源自任何处理程序的内容的前面,包括flat files(从快速磁盘上缓存的慢速磁盘提供),CGI 脚本的输出动态内容 generator,或从其他服务器代理的内容

    在默认的 configuration 中,mod_cache在过滤器堆栈中尽可能向前插入缓存过滤器,利用快速处理程序在将内容返回到 client 时绕过所有请求处理。在这种操作模式下,mod_cache可以被认为是一个高速缓存到网络服务器前面的高速缓存代理服务器,而在网络服务器本身内运行。

    当使用CacheQuickHandler指令关闭快速处理程序时,可以在管理员选择的过滤器堆栈中的某一点插入CACHE过滤器。这提供了在内容由mod_include过滤器个性化之前缓存内容的机会,或者可选地由mod_deflate过滤器压缩。

    在正常操作下,mod_cache将响应并可以通过请求中的 client 或响应中的服务器发送的Cache-Control和附注 _header 进行控制。在特殊情况下,mod_cache可以配置为覆盖这些 headers 并强制站点特定的行为,但是这种行为仅限于此缓存,并且不会影响 client 和服务器之间可能存在的其他缓存的操作,并且除非必要,否则不建议使用结果。

    RFC 2616 允许缓存在从原始服务器刷新现有陈旧条目时_陈述陈旧数据,并且在适当配置CacheLock伪指令时mod_cache支持此功能。此类响应将包含带有 110 响应 code 的警告 HTTP 标头。当刷新过时数据的尝试返回错误 500 或更高时,RFC 2616 还允许缓存返回陈旧数据,并且mod_cache默认支持此行为。此类响应将包含带有 111 响应 code 的警告 HTTP 标头。

    mod_cache需要一个或多个存储管理模块的服务。以下存储管理模块包含在基本 Apache 分发中:

    • mod_cache_disk
      实现基于磁盘的存储 manager。 Headers 和 body 分别存储在磁盘上,位于从缓存 URL 的 md5 哈希派生的目录结构中。可以同时存储多个内容协商响应,但是该模块不支持部分内容的缓存。提供了 htcacheclean 工具来列出缓存的 URL,删除缓存的 URL,或者将磁盘缓存的大小保持在大小和 inode 限制内。
    • mod_cache_socache
      实现基于存储 manager 的共享 object 缓存。 Headers 和 body 根据缓存的响应的 URL 存储在单个 key 下。可以同时存储多个内容协商响应,但是该模块不支持部分内容的缓存。

    缓存指南中提供了更多详细信息,讨论和示例。

    相关模块和指令

    相关模块相关指令
    mod_cache_disk
    mod_cache_socache
    CacheRoot
    CacheDirLevels
    CacheDirLength
    CacheMinFileSize
    CacheMaxFileSize
    CacheSocache
    CacheSocacheMaxTime
    CacheSocacheMinTime
    CacheSocacheMaxSize
    CacheSocacheReadSize
    CacheSocacheReadTime

    Sample Configuration

    Sample httpd.conf

    #
    # Sample Cache Configuration
    #
    LoadModule cache_module modules/mod_cache.so
    <IfModule mod_cache.c>
        LoadModule cache_disk_module modules/mod_cache_disk.so
        <IfModule mod_cache_disk.c>
            CacheRoot "c:/cacheroot"
            CacheEnable disk  "/"
            CacheDirLevels 5
            CacheDirLength 3
        </IfModule>
    
        # When acting as a proxy, don't cache the list of security updates
        CacheDisable "http://security.update.server/update-list/"
    </IfModule>
    

    避免雷鸣群

    当缓存的条目变得陈旧时,mod_cache将向后端提交条件请求,该条件请求将确认缓存的条目是否仍然是新鲜的,如果没有,则发送更新的实体。

    在缓存的实体变为陈旧的 time 与完全刷新陈旧实体的 time 之间存在少量但有限量的 time。在繁忙的服务器上,大量的请求可能会在此 time 期间到达,并导致**雷鸣群的请求突然且不可预测地攻击后端。

    为了防止雷鸣般的群体,CacheLock指令可用于定义在飞行中为 URL 创建锁的目录。该锁被其他请求用作提示**,以抑制尝试缓存(其他人去取实体),或者指示正在刷新陈旧条目(陈旧内容将在与此同时)。

    条目的初始缓存

    当第一个 time 缓存实体时,将为该实体创建一个锁,直到响应完全缓存为止。在锁的生存期内,缓存将禁止第二次和后续尝试缓存同一实体。虽然这并没有阻止雷鸣般的群体,但它确实会阻止缓存尝试同时多次缓存同一个实体。

    刷新过时的条目

    当实体达到其新鲜度生命周期并变得陈旧时,将为该实体创建一个锁,直到该响应被确认为仍然新鲜,或由后端替换。在锁定的生命周期中,第二个和后续的传入请求将导致返回过时的数据,并且雷鸣般的群体保持在停止状态。

    锁和 Cache-Control:no-cache

    锁仅用作提示,以使缓存在后端服务器上更加温和,但是如果需要,可以覆盖锁。如果 client 发送带有 Cache-Control 标头的请求强制重新加载,则将忽略可能存在的任何锁定,并且将立即遵守 client 的请求并刷新缓存的条目。

    作为进一步的安全机制,锁具有可配置的最大年龄。达到此年龄后,将删除锁定,并为新请求提供创建新锁定的机会。可以使用CacheLockMaxAge指令设置此最大年龄,默认为 5 秒。

    Example configuration

    启用缓存锁定

    #
    # Enable the cache lock
    #
    <IfModule mod_cache.c>
        CacheLock on
        CacheLockPath "/tmp/mod_cache-lock"
        CacheLockMaxAge 5
    </IfModule>
    

    使用 CACHE 过滤器进行精细控制

    在默认的缓存操作模式下,缓存作为快速处理程序运行,使大多数服务器处理短路并提供可用的最高缓存性能。

    在这种模式下,缓存**固定在服务器的前面,就像在服务器前面放置了一个独立的 RFC 2616 缓存代理一样。

    虽然此模式提供了最佳性能,但管理员可能会发现在某些情况下,他们可能希望在请求缓存后对请求执行进一步处理,例如将个性化注入缓存页面,或对内容应用授权限制。在这些情况下,管理员经常被迫在缓存服务器后面或前面放置独立的反向代理服务器来实现这一点。

    要解决此问题,可以将CacheQuickHandler指令设置为off,并且服务器将处理通常由 non-cached 请求处理的所有阶段,包括身份验证和授权阶段。

    此外,管理员可以选择在过滤器链中指定精确点,其中通过将CACHE过滤器添加到输出过滤器链来进行高速缓存。

    例如,要在将压缩应用于响应之前缓存内容,请将CACHE过滤器放在DEFLATE过滤器之前,如下面的 example 中所示:

    # Cache content before optional compression
    CacheQuickHandler off
    AddOutputFilterByType CACHE;DEFLATE text/plain
    

    另一个选项是在mod_include(或其他内容处理过滤器)应用个性化之前缓存内容。在这个 example 中,包含mod_include理解的标签的模板在被解析之前被缓存:

    # Cache content before mod_include and mod_deflate
    CacheQuickHandler off
    AddOutputFilterByType CACHE;INCLUDES;DEFLATE text/html
    

    您可以将CACHE过滤器放在过滤器链中的任何位置。在此 example 中,内容在被mod_include解析后缓存,但在被mod_deflate处理之前:

    # Cache content between mod_include and mod_deflate
    CacheQuickHandler off
    AddOutputFilterByType INCLUDES;CACHE;DEFLATE text/html
    

    警告:

    如果过滤器链中的CACHE过滤器的位置因任何原因发生变化,您可能需要刷新缓存以确保所提供的数据保持一致。mod_cache无法为您强制执行此操作。

    缓存状态和 Logging

    一旦mod_cache决定是否要从缓存中提供实体,决定的详细原因将被写入cache-status key 下的请求中的 subprocess 环境。这个原因可以通过LogFormat指令记录如下:

    LogFormat "%{cache-status}e ..."
    

    根据所做的缓存决策,原因也会根据需要在以下四个密钥之一下写入 subprocess 环境:

    • cache-hit
      响应是从缓存提供的。
    • cache-revalidate
      响应过时并成功重新验证,然后从缓存中提供。
    • cache-miss
      响应是从上游服务器提供的。
    • cache-invalidate
      缓存的实体由 GET 或 HEAD 以外的请求方法无效。

    这使得可以按照以下 example 支持缓存请求的条件 logging:

    CustomLog "cached-requests.log" common env=cache-hit
    CustomLog "uncached-requests.log" common env=cache-miss
    CustomLog "revalidated-requests.log" common env=cache-revalidate
    CustomLog "invalidated-requests.log" common env=cache-invalidate
    

    对于模块作者,可以使用名为 cache_status 的 hook,允许模块以自定义方式响应上面的缓存结果。

    CacheDefaultExpire 指令

    描述:未指定 expir date 时缓存文档的默认持续时间。
    句法:CacheDefaultExpire seconds
    默认:CacheDefaultExpire 3600(one hour)
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_cache

    CacheDefaultExpire指令指定默认 time(以秒为单位),如果文档未提供到期 date 和 last-modified date,则缓存文档。使用CacheMaxExpire指令指定的 value 不会覆盖此设置。

    CacheDefaultExpire 86400
    

    CacheDetailHeader 指令

    描述:在响应中添加 X-Cache-Detail 标头。
    句法:CacheDetailHeader on\|off
    默认:CacheDetailHeader off
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_cache
    兼容性:可在 Apache 2.3.9 及更高版本中使用

    CacheDetailHeader指令打开时,将在响应中添加X-Cache-Detail标头,其中包含特定缓存决策的详细原因。

    在开发缓存的 RESTful 服务期间,可以使用有关写入响应 headers 的缓存决策的其他信息,以确认Cache-Control和其他 headers 是否已被服务和 client 正确使用。

    如果使用普通处理程序,则此指令可能出现在<Directory>或<Location>指令中。如果使用快速处理程序,则此指令必须出现在服务器或虚拟 host context 中,否则将忽略该设置。

    # Enable the X-Cache-Detail header
    CacheDetailHeader on
    

    X-Cache-Detail:"conditional cache hit: entity refreshed" from localhost

    CacheDisable 指令

    描述:禁用指定 URL 的缓存
    句法:CacheDisable url-string \| on
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_cache

    CacheDisable指令指示mod_cache不要将 URL 缓存在 url-string 或低于 url-string。

    CacheDisable "/local_files"
    

    如果在<Location>指令中使用,则需要在位置下方指定路径,或者如果使用单词“on”,则将禁用整个位置的缓存。

    <Location "/foo">
        CacheDisable on
    </Location>
    

    可以将no-cache环境变量设置为在版本 2.2.12 及更高版本中的更精细的资源集上禁用缓存。

    参见

    • Apache 中的环境变量

    CacheEnable 指令

    描述:使用指定的存储 manager 启用指定 URL 的缓存
    句法:CacheEnable cache_type[url-string]
    Context:server config,virtual host,目录
    状态:延期
    模块:mod_cache
    兼容性:'/'应用于 2.2 及更早版本中的转发代理内容。

    CacheEnable指令指示mod_cache缓存@12或以下的 URL。缓存存储 manager 是使用 cache_type 参数指定的。或者,CacheEnable指令可以放在<Location>或<LocationMatch>部分内,以指示内容是可缓存的。 cache_type disk指示mod_cache使用由mod_cache_disk实现的基于磁盘的存储 manager。 cache_type socache指示mod_cache使用mod_cache_socache实现的基于共享 object 缓存的 storage manager。

    在 event 中,URL 空间在不同的CacheEnable指令之间重叠(如下面的 example),每个可能的存储 manager 将 run,直到第一个实际处理请求。存储 managers run 的 order 由 configuration 文件中CacheEnable指令的 order 决定。<Location>或<LocationMatch>部分中的CacheEnable指令在全局定义的CacheEnable指令之前处理。

    当充当转发代理服务器时,url-string 必须至少以应启用缓存的协议开始。

    # Cache content (normal handler only)
    CacheQuickHandler off
    <Location "/foo">
        CacheEnable disk
    </Location>
    
    # Cache regex (normal handler only)
    CacheQuickHandler off
    <LocationMatch "foo$">
        CacheEnable disk
    </LocationMatch>
    
    # Cache all but forward proxy url's (normal or quick handler)
    CacheEnable  disk  /
    
    # Cache FTP-proxied url's (normal or quick handler)
    CacheEnable  disk  ftp://
    
    # Cache forward proxy content from www.example.org (normal or quick handler)
    CacheEnable  disk  http://www.example.org/
    

    以**“*”开头的主机名匹配具有该后缀的所有主机名。以“.”开头的主机名**匹配包含后面的域组件的所有主机名。

    # Match www.example.org, and fooexample.org
    CacheEnable  disk  "http://*example.org/"
    # Match www.example.org, but not fooexample.org
    CacheEnable  disk  "http://.example.org/"
    

    可以将no-cache环境变量设置为在版本 2.2.12 及更高版本中的更精细的资源集上禁用缓存。

    参见

    • Apache 中的环境变量

    CacheHeader 指令

    描述:在响应中添加 X-Cache 标头。
    句法:CacheHeader on\|off
    默认:CacheHeader off
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_cache
    兼容性:可在 Apache 2.3.9 及更高版本中使用

    CacheHeader指令打开时,X-Cache标头将添加到响应中,并具有此响应的缓存状态。如果使用普通处理程序,则此指令可能出现在<Directory>或<Location>指令中。如果使用快速处理程序,则此指令必须出现在服务器或虚拟 host context 中,否则将忽略该设置。

    • 击中
      该实体很新鲜,并从缓存中提供。
    • ****重新验证
      该实体已过时,已成功重新验证并从缓存中提供。
    • 小姐
      该实体是从上游服务器获取的,不是从缓存中提供的。
    # Enable the X-Cache header
    CacheHeader on
    
    X-Cache: HIT from localhost
    

    CacheIgnoreCacheControl 指令

    描述:忽略不向 client 提供缓存内容的请求
    句法:CacheIgnoreCacheControl On\|Off
    默认:CacheIgnoreCacheControl Off
    Context:server config,virtual host
    状态:延期
    模块:mod_cache

    通常,不会从缓存中提供包含Cache-Control: no-cache或 Pragma:no-cache header value 的请求。CacheIgnoreCacheControl指令允许重写此行为。CacheIgnoreCacheControl On告诉服务器尝试从缓存中提供资源,即使请求包含 no-cache 标头值。永远不会缓存需要授权的资源。

    CacheIgnoreCacheControl On
    

    警告:

    即使 client 请求不从缓存提供文档,该指令也允许从缓存提供服务。这可能会导致提供过时的内容。

    参见

    • CacheStorePrivate
    • CacheStoreNoStore

    CacheIgnoreHeaders 指令

    描述:不要在缓存中存储给定的 HTTP header(s)。
    句法:CacheIgnoreHeaders header-string[header-string]...
    默认:CacheIgnoreHeaders None
    Context:server config,virtual host
    状态:延期
    模块:mod_cache

    根据 RFC 2616,hop-by-hop HTTP headers 不存储在缓存中。以下 HTTP headers 是 hop-by-hop headers,因此无论CacheIgnoreHeaders的设置如何,都不会存储在缓存中:

    • Connection
    • Keep-Alive
    • Proxy-Authenticate
    • Proxy-Authorization
    • TE
    • Trailers
    • Transfer-Encoding
    • Upgrade

    CacheIgnoreHeaders指定不应存储在缓存中的其他 HTTP _header。例如,在某些情况下,防止 cookies 存储在缓存中是有意义的。

    CacheIgnoreHeaders采用空格分隔的 HTTP headers 列表,不应存储在缓存中。如果只有 hop-by-hop headers 不应存储在缓存中(符合 RFC 2616 的行为),CacheIgnoreHeaders可以设置为None

    例 1

    CacheIgnoreHeaders Set-Cookie
    

    例 2

    CacheIgnoreHeaders None
    

    警告:

    如果由于CacheIgnoreHeaders设置而未存储正确缓存管理所需的类似Expires的_header,则 mod_cache 的行为未定义。

    CacheIgnoreNoLastMod 指令

    描述:忽略响应没有 Last Modified 标头的事实。
    句法:CacheIgnoreNoLastMod On\|Off
    默认:CacheIgnoreNoLastMod Off
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_cache

    通常,没有 last-modified date 的文档不会被缓存。在某些情况下,last-modified date 被删除(在mod_include处理 example 期间)或根本不提供。CacheIgnoreNoLastMod指令提供了一种方法,指定即使没有 last-modified date,也应考虑没有 last-modified 日期的文档进行缓存。如果文档未提供 last-modified date 和 expiry date,则CacheDefaultExpire指令指定的 value 将用于生成到期 date。

    CacheIgnoreNoLastMod On
    

    CacheIgnoreQueryString 指令

    描述:缓存时忽略查询 string
    句法:CacheIgnoreQueryString On\|Off
    默认:CacheIgnoreQueryString Off
    Context:server config,virtual host
    状态:延期
    模块:mod_cache

    通常,对每个唯一查询 string 分别缓存带有 query string 参数的请求。只有在指定了到期 time 时,才根据 RFC 2616/13.9 进行此操作。即使没有指定 expiration time,CacheIgnoreQueryString指令也会告诉缓存缓存请求,并且即使查询 string 不同,也要使用缓存的答复进行回复。从缓存的角度来看,当启用此指令时,请求被视为没有查询 string。

    CacheIgnoreQueryString On
    

    CacheIgnoreURLSessionIdentifiers 指令

    描述:在缓存时忽略在 URL 中编码的已定义的 session 标识符
    句法:CacheIgnoreURLSessionIdentifiers identifier[identifier]...
    默认:CacheIgnoreURLSessionIdentifiers None
    Context:server config,virtual host
    状态:延期
    模块:mod_cache

    有时 applications 将 session 标识符编码到 URL 中,如下例所示:

    • /someapplication/image.gif;jsessionid=123456789
    • /someapplication/image.gif?PHPSESSIONID=12345678

    这导致可缓存资源为每个 session 分别存储,这通常是不希望的。CacheIgnoreURLSessionIdentifiers允许定义从 key 中删除的标识符列表,该列表用于标识缓存中的实体,这样可以为每个 session 单独存储可缓存资源。

    CacheIgnoreURLSessionIdentifiers None清除忽略的标识符列表。否则,每个标识符都会添加到列表中。

    例 1

    CacheIgnoreURLSessionIdentifiers jsessionid
    

    例 2

    CacheIgnoreURLSessionIdentifiers None
    

    CacheKeyBaseURL 指令

    描述:覆盖反向代理缓存键的基本 URL。
    句法:CacheKeyBaseURL URL
    Context:server config,virtual host
    状态:延期
    模块:mod_cache
    兼容性:可在 Apache 2.3.9 及更高版本中使用

    指定CacheKeyBaseURL指令时,提供的 URL 将用作基本 URL,以计算反向代理 configuration 中缓存键的 URL。未指定时,使用当前虚拟 host 的 scheme,hostname 和 port 构造缓存 key。如果存在 cluster of machines,并且所有缓存的条目都应缓存在同一缓存 key 下,则可以使用此指令指定新的基本 URL。

    # Override the base URL of the cache key.
    CacheKeyBaseURL "http://www.example.com/"
    

    设置此指令时要小心。如果两个单独的虚拟主机意外地被赋予相同的基本 URL,则来自一个虚拟 host 的条目将被提供给另一个虚拟主机。

    CacheLastModifiedFactor 指令

    描述:用于根据 LastModified date 计算到期 date 的因子。
    句法:CacheLastModifiedFactor float
    默认:CacheLastModifiedFactor 0.1
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_cache

    在 event 中,文档未提供到期 date 但提供 last-modified date,可以根据自上次修改文档以来的 time 计算到期 date。CacheLastModifiedFactor指令根据以下公式指定用于生成此到期 date 的因子:expiry-period = time-since-last-modified-date * factor expiry-date = current-date + expiry-period对于 example,如果文档上次修改 10 小时前,因子为 0.1 则 expiry-period 将设置为 10 * 0.1 = 1 小时。如果当前 time 是 3:00pm 那么计算的 expiry-date 将是 3:00pm 1hour = 4:00pm。如果 expiry-period 将比CacheMaxExpire设置的长,则后者优先。

    CacheLastModifiedFactor 0.5
    

    CacheLock 指令

    描述:启用雷鸣般的群锁。
    句法:CacheLock on\|off
    默认:CacheLock off
    Context:server config,virtual host
    状态:延期
    模块:mod_cache
    兼容性:可在 Apache 2.2.15 及更高版本中使用

    CacheLock指令为给定的 URL 空间启用了 thundering herd lock。

    在最小配置中,以下指令是在默认系统临时目录中启用 thundering herd lock 所需的全部操作。

    # Enable cache lock
    CacheLock on
    

    CacheLockMaxAge 指令

    描述:设置缓存锁定的最大可能年龄。
    句法:CacheLockMaxAge integer
    默认:CacheLockMaxAge 5
    Context:server config,virtual host
    状态:延期
    模块:mod_cache

    CacheLockMaxAge指令指定任何缓存锁定的最大年龄。

    将以秒为单位锁定比此 value 更早的锁定,并且下一个传入请求将有机会 re-establish 锁定。此机制可防止缓慢客户端过度 long time 刷新实体。

    CacheLockPath 指令

    描述:设置锁定路径目录。
    句法:CacheLockPath directory
    默认:CacheLockPath /tmp/mod_cache-lock
    Context:server config,virtual host
    状态:延期
    模块:mod_cache

    CacheLockPath指令允许您指定创建锁的目录。默认情况下,使用系统的临时文件夹。锁由空的 files 组成,只存在于飞行中的陈旧 URL,因此与传统的磁盘缓存相比,资源密集程度要低得多。

    CacheMaxExpire 指令

    描述:缓存文档的最大 time(秒)
    句法:CacheMaxExpire seconds
    默认:CacheMaxExpire 86400(one day)
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_cache

    CacheMaxExpire指令指定在不检查源服务器的情况下保留可缓存 HTTP 文档的最大秒数。因此,文档最多只能在 date 这个秒数之外。即使文档提供了到期 date,也会强制执行此最大 value。

    CacheMaxExpire 604800
    

    CacheMinExpire 指令

    描述:缓存文档的最小 time(秒)
    句法:CacheMinExpire seconds
    默认:CacheMinExpire 0
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_cache

    CacheMinExpire指令指定在不检查源服务器的情况下保留可缓存 HTTP 文档的最小秒数。仅在文档未提供有效的 expire time 时使用。

    CacheMinExpire 3600
    

    CacheQuickHandler 指令

    描述:从快速处理程序运行缓存。
    句法:CacheQuickHandler on\|off
    默认:CacheQuickHandler on
    Context:server config,virtual host
    状态:延期
    模块:mod_cache
    兼容性:Apache HTTP Server 2.3.3 及更高版本

    CacheQuickHandler指令控制处理缓存的阶段。

    在默认启用的 configuration 中,缓存在快速处理程序阶段运行。此阶段使大多数服务器处理短路,并且代表典型服务器的最高性能操作模式。缓存固定在服务器前面的上,避免了大部分服务器处理。

    禁用时,缓存作为普通处理程序运行,并在处理服务器请求时受到完整的阶段集的影响。虽然此模式比默认模式慢,但它允许在需要完全处理的情况下使用缓存,例如当内容受授权时。

    # Run cache as a normal handler
    CacheQuickHandler off
    

    当禁用快速处理程序时,管理员还可以通过向链中添加CACHE过滤器来选择要执行高速缓存的过滤器链中的精确位置。

    # Cache content before mod_include and mod_deflate
    CacheQuickHandler off
    AddOutputFilterByType CACHE;INCLUDES;DEFLATE text/html
    

    如果多次指定 CACHE 过滤器,则将应用最后一个实例。

    CacheStaleOnError 指令

    描述:提供陈旧内容代替 5xx 回复。
    句法:CacheStaleOnError on\|off
    默认:CacheStaleOnError on
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_cache
    兼容性:可在 Apache 2.3.9 及更高版本中使用

    CacheStaleOnError指令打开时,并且当缓存中有过时数据时,缓存将通过返回过时数据而不是 5xx 响应来响应来自后端的 5xx 响应。虽然 clients 发送的 Cache-Control headers 将被尊重,并且原始 5xx 响应会根据请求返回到 client,但返回到 client 的 5xx 响应不会使缓存中的内容无效。

    # Serve stale data on error.
    CacheStaleOnError on
    

    CacheStoreExpired 指令

    描述:尝试缓存服务器报告为已过期的响应
    句法:CacheStoreExpired On\|Off
    默认:CacheStoreExpired Off
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_cache

    从 httpd 2.2.4 开始,已经过期的响应不会存储在缓存中。CacheStoreExpired指令允许重写此行为。CacheStoreExpired On 告诉服务器尝试缓存资源(如果它是陈旧的)。后续请求将触发源服务器的 If-Modified-Since 请求,并且如果后端资源未更改,则可以从高速缓存满足响应。

    CacheStoreExpired On
    

    CacheStoreNoStore 指令

    描述:尝试缓存已标记为 no-store 的请求或响应。
    句法:CacheStoreNoStore On\|Off
    默认:CacheStoreNoStore Off
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_cache

    通常,具有Cache-Control: no-store标头值的请求或响应将不会存储在缓存中。CacheStoreNoStore指令允许重写此行为。CacheStoreNoStore On 告诉服务器尝试缓存资源,即使它包含 no-store 标头值。永远不会缓存需要授权的资源。

    CacheStoreNoStore On
    

    警告:

    如 RFC 2616 中所述,no-store 指令旨在“防止无意释放或保留敏感信息(例如,在备份磁带上)”。启用此选项可以缓存缓存中的敏感信息。特此警告你。

    参见

    • CacheIgnoreCacheControl
    • CacheStorePrivate

    CacheStorePrivate 指令

    描述:尝试缓存服务器标记为私有的响应
    句法:CacheStorePrivate On\|Off
    默认:CacheStorePrivate Off
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_cache

    通常,具有Cache-Control: private标头值的响应将不会存储在缓存中。CacheStorePrivate指令允许重写此行为。CacheStorePrivate On 告诉服务器尝试缓存资源,即使它包含私有标头值。永远不会缓存需要授权的资源。

    CacheStorePrivate On
    

    警告:

    即使上游服务器已请求不缓存资源,此指令也将允许缓存。该指令仅适用于“私有”缓存。

    参见

    • CacheIgnoreCacheControl
    • CacheStoreNoStore

    上篇:mod_buffer

    下篇:mod_cache_disk