On this page
Apache 模块 mod_cache
Description: | 符合 RFC 2616 的 HTTP 缓存过滤器。 |
---|---|
Status: | Extension |
Module Identifier: | cache_module |
Source File: | mod_cache.c |
Summary
Warning
应谨慎使用此模块,因为当CacheQuickHandler伪指令的默认值为 on 时,将绕过Allow和Deny伪指令。您不应为希望通过 Client 端主机名,地址或环境变量限制访问的任何内容启用快速处理程序缓存。
mod_cache实现了RFC 2616兼容的 HTTP 内容缓存过滤器 ,并支持缓存包含 Vary Headers 的内容协商响应。
符合 RFC 2616 的缓存提供了一种机制,可以验证陈旧或过期的内容是否仍然新鲜,并且当原始服务器通过遵守If-None-Match HTTP 请求 Headers 支持“条件请求”时,可以显着提高性能。仅当内容已更改时才从头重新生成内容,而不是在缓存的条目过期时不重新生成内容。
作为过滤器,可以将mod_cache放在任何处理程序来源的内容之前,包括 平面文件 (由高速磁盘上缓存的慢速磁盘提供), CGI 脚本 或 的输出动态内容生成器 ,或 从另一台服务器 代理的内容**。
在默认配置中,mod_cache将缓存过滤器尽可能远地插入过滤器堆栈中,并在向 Client 端返回内容时利用 快速处理程序 绕过所有每个请求处理。在这种操作模式下,mod_cache可以认为是在 Web 服务器本身中运行时固定在 Web 服务器前端的缓存代理服务器。
使用CacheQuickHandler指令关闭快速处理程序时,可以在 Management 员选择的过滤器堆栈中的某个点插入 CACHE 过滤器。这提供了在内容被mod_include过滤器个性化或可选地由mod_deflate过滤器压缩之前缓存内容的机会。
在正常操作下,mod_cache将响应并由 Client 机在请求中或响应中的服务器发送的Cache-Control和PragmaHeaders 控制。在特殊情况下,可以将mod_cache配置为覆盖这些 Headers 并强制执行特定于站点的行为,但是这种行为将仅限于此缓存,并且不会影响 Client 端和服务器之间可能存在的其他缓存的操作。除非绝对必要,否则不建议使用此结果。
RFC 2616 允许高速缓存在从源服务器刷新现有的陈旧条目的同时返回陈旧数据,并且在适当配置CacheLock指令时mod_cache支持此功能。这样的响应将包含带有 110 响应代码的Warning HTTP Headers。当尝试刷新陈旧数据的尝试返回错误 500 或更高时,并且默认情况下mod_cache支持此行为,RFC 2616 还允许缓存返回陈旧数据。这样的响应将包含带有 111 响应代码的Warning HTTP Headers。
mod_cache需要一个或多个存储 Management 模块的服务。基本的 Apache 发行版中包含以下存储 Management 模块:
-
- 实现基于磁盘的存储 Management 器。Headers 和正文分别存储在磁盘上的目录结构中,该目录结构是从缓存 URL 的 md5 哈希派生的。可以同时存储多个内容协商的响应,但是此模块不支持部分内容的缓存。提供htcacheclean工具可以列出缓存的 URL,删除缓存的 URL 或将磁盘缓存的大小保持在大小和 inode 限制之内。
-
- 实现基于共享对象缓存的存储 Management 器。Headers 和正文根据要缓存的响应的 URL 一起存储在单个键下。可以同时存储多个内容协商的响应,但是此模块不支持部分内容的缓存。
Caching Guide中提供了更多详细信息,讨论和示例。
相关模块和指令
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将向后端提交条件请求,以确认后端是否仍然是最新的,如果不是,则发送更新的实体。
从缓存的实体变为陈旧的时间到陈旧的实体被完全刷新的时间之间,存在少量但有限的时间。在繁忙的服务器上,这段时间内可能会到达大量请求,并导致大量的请求突然突然地攻击后端。
为了阻止雷声大浪,可以使用CacheLock指令定义目录,在该目录中创建 URL 飞行中 的锁。该锁被其他请求用作“提示”,以抑制尝试进行缓存的尝试(其他人已经获取了该实体),或表示正在刷新陈旧的条目(陈旧的内容将在与此同时)。
条目的初始缓存
首次缓存实体时,将为该实体创建一个锁,直到响应被完全缓存。在锁定的生存期内,缓存将禁止第二次及其后尝试缓存同一实体。尽管这并不能阻止雷声群,但是它确实停止了尝试同时多次缓存同一实体的缓存。
刷新陈旧条目
当实体达到其新鲜度生命周期并过时时,将为该实体创建一个锁,直到确认该响应仍为新鲜或由后端替换为止。在锁的有效期内,第二个及随后的传入请求将导致过时的数据被返回,而雷电群则被拒之门外。
锁和缓存控制:无缓存
锁仅用作“提示”,以使后端服务器上的缓存更加平缓,但是,如有必要,可以覆盖该锁。如果 Client 端发送带有 Cache-Control Headers 的请求以强制重新加载,则可能存在的任何锁都将被忽略,并且 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 高速缓存代理一样。
尽管此模式提供最佳性能,但 Management 员可能会发现,在某些情况下,他们可能希望在缓存请求后对请求进行进一步处理,例如将个性化内容注入到缓存的页面中,或对内容应用授权限制。 。在这种情况下,Management 员通常被迫在缓存服务器的后面或前面放置独立的反向代理服务器以实现此目的。
为了解决这个问题,可以将CacheQuickHandler指令设置为 off ,服务器将处理通常由非缓存请求处理的所有阶段,包括 authentication 和 authorization 阶段。
此外,Management 员可以选择将 CACHE 过滤器添加到输出过滤器链中,以指定 过滤器链内的精确点 进行缓存的位置。
例如,要在对响应进行压缩之前缓存内容,请将 CACHE 过滤器放在 DEFLATE 过滤器之前,如下例所示:
# Cache content before optional compression
CacheQuickHandler off
AddOutputFilterByType CACHE;DEFLATE text/plain
另一种选择是在mod_include(或其他内容处理过滤器)应用个性化设置之前先缓存内容。在此示例中,包含被mod_include理解的标签的模板在解析之前被缓存:
# Cache content before mod_include and mod_deflate
CacheQuickHandler off
AddOutputFilterByType CACHE;INCLUDES;DEFLATE text/html
您可以将 CACHE 过滤器放置在过滤器链中所需的任何位置。在此示例中,内容在被mod_include解析之后但在被mod_deflate处理之前被缓存:
# Cache content between mod_include and mod_deflate
CacheQuickHandler off
AddOutputFilterByType INCLUDES;CACHE;DEFLATE text/html
Warning:
如果出于任何原因更改了“ CACHE”过滤器在过滤器链中的位置,则可能需要“刷新”缓存以确保所提供的数据保持一致。 mod_cache无法为您强制执行此操作。
缓存状态和日志记录
mod_cache决定是否从缓存中提供实体后,该决定的详细原因将在 cache-status 键下写入请求内的子流程环境中。可以通过LogFormat指令记录此原因,如下所示:
LogFormat "%{cache-status}e ..."
根据所做的缓存决策,还将根据以下四个关键之一将原因写入子流程环境:
cache-hit
- 响应是从缓存提供的。
cache-revalidate
- 响应已过时,已成功重新验证,然后从缓存中提供。
cache-miss
- 响应是从上游服务器提供的。
cache-invalidate
- 缓存的实体通过 GET 或 HEAD 以外的请求方法无效。
根据以下示例,这可以支持对缓存的请求进行条件日志记录:
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 的钩子,该钩子允许模块以自定义方式响应上述缓存结果。
CacheDefaultExpire Directive
Description: | 未指定有效日期时的默认文档缓存时间。 |
---|---|
Syntax: | CacheDefaultExpire seconds |
Default: | CacheDefaultExpire 3600 (one hour) |
Context: | 服务器配置,虚拟主机,目录,.htaccess |
Status: | Extension |
Module: | mod_cache |
CacheDefaultExpire
指令指定了默认时间(以秒为单位),如果该文档没有提供到期日期或最后修改日期,则该默认时间以秒为单位。使用CacheMaxExpire指令指定的值不会覆盖此设置。
CacheDefaultExpire 86400
CacheDetailHeader Directive
Description: | 将 X-Cache-Detail Headers 添加到响应。 |
---|---|
Syntax: | CacheDetailHeader on|off |
Default: | CacheDetailHeader off |
Context: | 服务器配置,虚拟主机,目录,.htaccess |
Status: | Extension |
Module: | mod_cache |
Compatibility: | 在 Apache 2.3.9 和更高版本中可用 |
当CacheDetailHeader
指令打开时, X-Cache-Detail Headers 将添加到响应中,其中包含特定缓存决策的详细原因。
在开发缓存的 RESTful 服务期间,将有关缓存决策的其他信息写入响应 Headers,以确认Cache-Control
和其他 Headers 是否已被服务和 Client 端正确使用,可能很有用。
如果使用普通处理程序,则此伪指令可能出现在<Directory>或<Location>伪指令内。如果使用快速处理程序,则此伪指令必须出现在服务器或虚拟主机上下文中,否则设置将被忽略。
# Enable the X-Cache-Detail header
CacheDetailHeader on
X-Cache-Detail: "conditional cache hit: entity refreshed" from localhost
CacheDisable Directive
Description: | 禁用指定 URL 的缓存 |
---|---|
Syntax: | CacheDisable url-string | on |
Context: | 服务器配置,虚拟主机,目录,.htaccess |
Status: | Extension |
Module: | mod_cache |
CacheDisable
指令指示mod_cache 不缓存网址字符串或以下的网址。
Example
CacheDisable "/local_files"
如果在<Location>指令中使用,则需要在位置下方指定路径,或者如果使用单词“ on”,则将禁用对整个位置的缓存。
Example
<Location "/foo">
CacheDisable on
</Location>
可以将no-cache
环境变量设置为禁用 2.2.12 和更高版本中的细粒度资源集上的缓存。
See also
CacheEnable Directive
Description: | 使用指定的存储 Management 器启用指定 URL 的缓存 |
---|---|
Syntax: | CacheEnable cache_type [url-string] |
Context: | 服务器配置,虚拟主机,目录 |
Status: | Extension |
Module: | mod_cache |
Compatibility: | URL 字符串“ /”应用于在 2.2 及更早版本中转发代理内容。 |
CacheEnable
指令指示mod_cache将 URL 缓存在 url-string 或以下。高速缓存存储 Management 器由 cache_type 参数指定。可以将CacheEnable
指令放置在<Location>或<LocationMatch>部分中,以指示内容可缓存。 cache_type disk
指示mod_cache使用mod_cache_disk实现的基于磁盘的存储 Management 器。 cache_type socache
指示mod_cache使用由mod_cache_socache实现的基于共享对象缓存的存储 Management 器。
如果 URL 空间在不同的CacheEnable
指令之间重叠(如下面的示例),则将运行每个可能的存储 Management 器,直到第一个实际处理请求的存储 Management 器为止。存储 Management 器的运行 Sequences 由配置文件中CacheEnable
指令的 Sequences 确定。 <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 和更高版本中的细粒度资源集上的缓存。
See also
CacheHeader Directive
Description: | 将 X-Cache Headers 添加到响应中。 |
---|---|
Syntax: | CacheHeader on|off |
Default: | CacheHeader off |
Context: | 服务器配置,虚拟主机,目录,.htaccess |
Status: | Extension |
Module: | mod_cache |
Compatibility: | 在 Apache 2.3.9 和更高版本中可用 |
当CacheHeader
指令打开时, X-Cache 头将被添加到响应中,并带有该响应的缓存状态。如果使用普通处理程序,则此伪指令可能出现在<Directory>或<Location>伪指令内。如果使用快速处理程序,则此伪指令必须出现在服务器或虚拟主机上下文中,否则设置将被忽略。
HIT
- 该实体是新鲜的,并且是从缓存中提供的。
REVALIDATE
- 该实体已过时,已成功重新验证并从缓存中提供。
MISS
- 该实体是从上游服务器获取的,而不是从缓存提供的。
# Enable the X-Cache header
CacheHeader on
X-Cache: HIT from localhost
CacheIgnoreCacheControl Directive
Description: | 忽略不向 Client 端提供缓存内容的请求 |
---|---|
Syntax: | CacheIgnoreCacheControl On|Off |
Default: | CacheIgnoreCacheControl Off |
Context: | 服务器配置,虚拟主机 |
Status: | Extension |
Module: | mod_cache |
通常,包含Cache-Control: no-cache
或 Pragma:no-cache 头值的请求将不会从缓存中提供。 CacheIgnoreCacheControl
指令允许覆盖此行为。 CacheIgnoreCacheControl On
告诉服务器即使请求中包含无缓存头值,也尝试从缓存中提供资源。需要授权的资源将永远不会被缓存。
CacheIgnoreCacheControl On
Warning:
即使 Client 端已请求不从缓存中提供文档,此指令也将允许从缓存中提供服务。这可能会导致提供过时的内容。
See also
CacheIgnoreHeaders Directive
Description: | 不要将给定的 HTTP Headers 存储在缓存中。 |
---|---|
Syntax: | CacheIgnoreHeaders header-string [header-string] ... |
Default: | CacheIgnoreHeaders None |
Context: | 服务器配置,虚拟主机 |
Status: | Extension |
Module: | mod_cache |
根据 RFC 2616,逐跳 HTTP Headers 不存储在缓存中。以下 HTTP Headers 是逐跳 Headers,因此无论CacheIgnoreHeaders
的设置如何,在任何情况下都不会存储在缓存中:
Connection
Keep-Alive
Proxy-Authenticate
Proxy-Authorization
TE
Trailers
Transfer-Encoding
Upgrade
CacheIgnoreHeaders
指定不应存储在缓存中的其他 HTTP Headers。例如,在某些情况下,防止 cookie 被存储在缓存中是有意义的。
CacheIgnoreHeaders
采用空格分隔的 HTTP Headers 列表,这些 Headers 不应存储在缓存中。如果不应仅将逐跳 Headers 存储在缓存中(符合 RFC 2616 的行为),则可以将CacheIgnoreHeaders
设置为None
。
Example 1
CacheIgnoreHeaders Set-Cookie
Example 2
CacheIgnoreHeaders None
Warning:
如果由于CacheIgnoreHeaders
设置而未存储正确的缓存 Management 所需的诸如Expires
之类的 Headers,则 mod_cache 的行为未定义。
CacheIgnoreNoLastMod Directive
Description: | 忽略响应没有 Last Modified Headers 的事实。 |
---|---|
Syntax: | CacheIgnoreNoLastMod On|Off |
Default: | CacheIgnoreNoLastMod Off |
Context: | 服务器配置,虚拟主机,目录,.htaccess |
Status: | Extension |
Module: | mod_cache |
通常,不缓存没有最后修改日期的文档。在某些情况下,上次修改的日期会被删除(例如在mod_include处理期间),或者根本不提供。 CacheIgnoreNoLastMod
指令提供一种方法,用于指定应考虑将没有上次修改日期的文档进行缓存,即使没有上一次修改日期的文档也可以进行缓存。如果文档没有提供最后修改日期和有效期,则CacheDefaultExpire指令指定的值将用于生成有效期。
CacheIgnoreNoLastMod On
CacheIgnoreQueryString Directive
Description: | 缓存时忽略查询字符串 |
---|---|
Syntax: | CacheIgnoreQueryString On|Off |
Default: | CacheIgnoreQueryString Off |
Context: | 服务器配置,虚拟主机 |
Status: | Extension |
Module: | mod_cache |
通常,具有查询字符串参数的请求将分别为每个唯一查询字符串缓存。仅当指定了到期时间时,才根据 RFC 2616/13.9 执行此操作。 CacheIgnoreQueryString
伪指令告诉缓存,即使未指定到期时间,也要缓存请求;即使查询字符串不同,也要使用缓存的回复进行回复。从缓存的角度来看,启用此伪指令后,将请求视为没有查询字符串。
CacheIgnoreQueryString On
CacheIgnoreURLSessionIdentifiers Directive
Description: | 缓存时忽略 URL 中编码的定义的会话标识符 |
---|---|
Syntax: | CacheIgnoreURLSessionIdentifiers identifier [identifier] ... |
Default: | CacheIgnoreURLSessionIdentifiers None |
Context: | 服务器配置,虚拟主机 |
Status: | Extension |
Module: | mod_cache |
有时,应用程序会将会话标识符编码为 URL,如以下示例所示:
/someapplication/image.gif;jsessionid=123456789
/someapplication/image.gif?PHPSESSIONID=12345678
这导致可缓存资源针对每个会话分别存储,这通常是不希望的。 CacheIgnoreURLSessionIdentifiers
让我们定义从用于标识高速缓存中实体的键中删除的标识符列表,这样可高速缓存的资源就不会为每个会话单独存储。
CacheIgnoreURLSessionIdentifiers None
清除忽略的标识符列表。否则,每个标识符将添加到列表中。
Example 1
CacheIgnoreURLSessionIdentifiers jsessionid
Example 2
CacheIgnoreURLSessionIdentifiers None
CacheKeyBaseURL Directive
Description: | 覆盖反向代理缓存键的基本 URL。 |
---|---|
Syntax: | CacheKeyBaseURL URL |
Context: | 服务器配置,虚拟主机 |
Status: | Extension |
Module: | mod_cache |
Compatibility: | 在 Apache 2.3.9 和更高版本中可用 |
指定CacheKeyBaseURL
指令后,提供的 URL 将用作基本 URL,以计算反向代理配置中的缓存键的 URL。如果未指定,则使用当前虚拟主机的方案,主机名和端口来构造缓存键。如果存在计算机集群,并且所有缓存的条目都应缓存在同一缓存键下,则可以使用此伪指令指定新的基本 URL。
# Override the base URL of the cache key.
CacheKeyBaseURL "http://www.example.com/"
Warning
设置此指令时请多加注意。如果意外地给两个单独的虚拟主机提供了相同的基本 URL,则来自一个虚拟主机的条目将被提供给另一个虚拟主机。
CacheLastModifiedFactor Directive
Description: | 用于基于 LastModified 日期计算到期日期的因子。 |
---|---|
Syntax: | CacheLastModifiedFactor float |
Default: | CacheLastModifiedFactor 0.1 |
Context: | 服务器配置,虚拟主机,目录,.htaccess |
Status: | Extension |
Module: | mod_cache |
如果文档没有提供有效期但提供了最后修改日期,则可以基于自上次修改文档以来的时间来计算有效期。 CacheLastModifiedFactor
伪指令根据以下公式指定要在该到期日期的生成中使用的因子:expiry-period = time-since-last-modified-date * factor expiry-date = current-date + expiry-period
例如,如果文档上次修改是在 10 个小时前,并且因子为 0.1,则到期期限将设置为 10 * 0.1 = 1 小时。如果当前时间是 3:00 pm,则计算的到期日期将是 3:00 pm 1hour = 4:00 pm。如果到期时间比CacheMaxExpire设置的时间长,则后者优先。
CacheLastModifiedFactor 0.5
CacheLock Directive
Description: | 启用防雷群锁。 |
---|---|
Syntax: | CacheLock on|off |
Default: | CacheLock off |
Context: | 服务器配置,虚拟主机 |
Status: | Extension |
Module: | mod_cache |
Compatibility: | 在 Apache 2.2.15 及更高版本中可用 |
CacheLock
指令可为给定的 URL 空间启用雷电追赶者锁定。
在最小配置中,以下指令是启用默认系统临时目录中的雷电追赶者锁定所需要的全部。
# Enable cache lock
CacheLock on
CacheLockMaxAge Directive
Description: | 设置高速缓存锁定的最大可能期限。 |
---|---|
Syntax: | CacheLockMaxAge integer |
Default: | CacheLockMaxAge 5 |
Context: | 服务器配置,虚拟主机 |
Status: | Extension |
Module: | mod_cache |
CacheLockMaxAge
伪指令指定任何高速缓存锁的最长期限。
超过此值(以秒为单位)的锁定将被忽略,并且下一个传入的请求将有机会重新构建该锁定。此机制可防止慢速 Client 端花费过多时间来刷新实体。
CacheLockPath Directive
Description: | 设置锁定路径目录。 |
---|---|
Syntax: | CacheLockPath directory |
Default: | CacheLockPath /tmp/mod_cache-lock |
Context: | 服务器配置,虚拟主机 |
Status: | Extension |
Module: | mod_cache |
CacheLockPath
指令允许您指定在其中创建锁的目录。默认情况下,使用系统的临时文件夹。锁由空文件组成,这些空文件仅在飞行中的过时 URL 中存在,因此与传统的磁盘缓存相比,资源占用量明显减少。
CacheMaxExpire Directive
Description: | 缓存文档的最长时间(以秒为单位) |
---|---|
Syntax: | CacheMaxExpire seconds |
Default: | CacheMaxExpire 86400 (one day) |
Context: | 服务器配置,虚拟主机,目录,.htaccess |
Status: | Extension |
Module: | mod_cache |
CacheMaxExpire
伪指令指定在不检查源服务器的情况下保留可缓存 HTTP 文档的最大秒数。因此,文档最多将过时此秒数。即使随文档提供了有效期,也会强制执行此最大值。
CacheMaxExpire 604800
CacheMinExpire Directive
Description: | 缓存文档的最短时间(以秒为单位) |
---|---|
Syntax: | CacheMinExpire seconds |
Default: | CacheMinExpire 0 |
Context: | 服务器配置,虚拟主机,目录,.htaccess |
Status: | Extension |
Module: | mod_cache |
CacheMinExpire
指令指定在不检查源服务器的情况下保留可缓存 HTTP 文档的最小秒数。仅当文档没有提供有效的到期时间时才使用此选项。
CacheMinExpire 3600
CacheQuickHandler Directive
Description: | 从快速处理程序运行缓存。 |
---|---|
Syntax: | CacheQuickHandler on|off |
Default: | CacheQuickHandler on |
Context: | 服务器配置,虚拟主机 |
Status: | Extension |
Module: | mod_cache |
Compatibility: | Apache HTTP Server 2.3.3 及更高版本 |
CacheQuickHandler
指令控制处理缓存的阶段。
在默认启用的配置中,缓存在快速处理程序阶段内运行。此阶段使大多数服务器处理短路,并且代表了典型服务器最高效的操作模式。缓存“栓”到服务器的前端,并且避免了大多数服务器处理。
禁用后,缓存将作为普通处理程序运行,并且在处理服务器请求时会受整个阶段的限制。尽管此模式比默认模式慢,但它允许在需要完全处理的情况下(例如,内容受授权时)使用缓存。
# Run cache as a normal handler
CacheQuickHandler off
禁用快速处理程序后,Management 员还可以通过在链中添加 CACHE 过滤器,在过滤器链中选择要执行缓存的确切位置。
# Cache content before mod_include and mod_deflate
CacheQuickHandler off
AddOutputFilterByType CACHE;INCLUDES;DEFLATE text/html
如果多次指定 CACHE 过滤器,则将应用最后一个实例。
CacheStaleOnError Directive
Description: | 提供过时的内容来代替 5xx 响应。 |
---|---|
Syntax: | CacheStaleOnError on|off |
Default: | CacheStaleOnError on |
Context: | 服务器配置,虚拟主机,目录,.htaccess |
Status: | Extension |
Module: | mod_cache |
Compatibility: | 在 Apache 2.3.9 和更高版本中可用 |
当CacheStaleOnError
指令打开时,并且缓存中有过期数据时,缓存将通过返回过期数据(而不是 5xx 响应)来响应来自后端的 5xx 响应。虽然将尊重 Client 端发送的 Cache-Control Headers,并且原始 5xx 响应应请求返回给 Client 端,但如此返回给 Client 端的 5xx 响应不会使缓存中的内容无效。
# Serve stale data on error.
CacheStaleOnError on
CacheStoreExpired Directive
Description: | 尝试缓存服务器报告为过期的响应 |
---|---|
Syntax: | CacheStoreExpired On|Off |
Default: | CacheStoreExpired Off |
Context: | 服务器配置,虚拟主机,目录,.htaccess |
Status: | Extension |
Module: | mod_cache |
从 httpd 2.2.4 开始,已经过期的响应不会存储在缓存中。 CacheStoreExpired
指令允许此行为被覆盖。 CacheStoreExpired
On(开)告诉服务器尝试缓存资源(如果陈旧)。后续请求将触发原始服务器的 If-Modified-Since 请求,并且如果后端资源未更改,则可以从缓存中满足响应。
CacheStoreExpired On
CacheStoreNoStore Directive
Description: | 尝试缓存已标记为“无存储”的请求或响应。 |
---|---|
Syntax: | CacheStoreNoStore On|Off |
Default: | CacheStoreNoStore Off |
Context: | 服务器配置,虚拟主机,目录,.htaccess |
Status: | Extension |
Module: | mod_cache |
通常,具有Cache-Control: no-store
Headers 值的请求或响应不会存储在缓存中。 CacheStoreNoStore
指令允许覆盖此行为。 CacheStoreNoStore
On 指示服务器尝试缓存资源,即使该资源包含无存储 Headers 值也是如此。需要授权的资源将永远不会被缓存。
CacheStoreNoStore On
Warning:
如 RFC 2616 中所述,no-store 指令旨在“防止敏感信息的意外释放或保留(例如,在备份磁带上)”。启用此选项可以将敏感信息存储在缓存中。特此警告您。
See also
CacheStorePrivate Directive
Description: | 尝试缓存服务器已标记为私有的响应 |
---|---|
Syntax: | CacheStorePrivate On|Off |
Default: | CacheStorePrivate Off |
Context: | 服务器配置,虚拟主机,目录,.htaccess |
Status: | Extension |
Module: | mod_cache |
通常,Headers 值为Cache-Control: private
的响应不会存储在缓存中。 CacheStorePrivate
指令允许覆盖此行为。 CacheStorePrivate
On 指示服务器尝试缓存资源,即使该资源包含私有 Headers 值也是如此。需要授权的资源将永远不会被缓存。
CacheStorePrivate On
Warning:
即使上游服务器已请求不缓存资源,此指令也将允许缓存。该指令仅适用于“专用”缓存。