本文将介绍如何使用Apache HTTP Server的缓存功能来加速Web和代理服务,同时避免常见问题和错误配置。
Apache HTTP服务器提供了一系列缓存功能,旨在以各种方式提高服务器的性能。
三态RFC2616 HTTP缓存mod_cache及其提供者模块mod_cache_disk提供智能的HTTP感知缓存。内容本身存储在缓存中,mod_cache旨在遵守控制内容可缓存性的所有各种HTTP头和选项。mod_cache针对简单和复杂的缓存配置,可以在其中处理代理内容,动态本地内容,或者需要加速对可能较慢的磁盘上的本地文件的访问。
双状态键/值共享对象缓存
共享对象缓存API(socache)及其提供程序模块提供基于服务器范围的键/值共享对象缓存。这些模块旨在缓存低级别数据,例如SSL会话和身份验证凭据。后端允许数据在服务器范围内存储在共享内存中,或者数据中心内存储在缓存中,例如memcache或distcache。
专门的文件缓存
mod_file_cache提供了在服务器启动时将文件预加载到内存中的功能,并且可以改善访问时间并保存经常访问的文件上的文件句柄,因为不需要在每个请求上转到磁盘。
三态RFC2616 HTTP缓存
HTTP协议包含对RFC2616第13节描述的内联缓存机制的内置支持,mod_cache模块可用于利用此功能。
与简单的两个状态键/值缓存不同,其中内容在不再新鲜时完全消失,HTTP缓存包括保留陈旧内容的机制,并询问源服务器此陈旧内容是否已更改,如果不是则再次刷新。
HTTP缓存中的条目存在以下三种状态之一:
Fresh
如果内容足够新(比其新鲜寿命更年轻),则认为是Fresh。HTTP缓存可以免费提供新内容,而无需对源服务器进行任何调用。
Stale
如果内容太旧(早于其新鲜度生命周期),则认为是Stale。HTTP缓存应联系原始服务器,并在向客户端提供过时内容之前检查内容是否仍然是新的。如果原始服务器仍然无效,则原始服务器将使用替换内容进行响应,或者理想情况下,源服务器将使用代码进行响应以告知缓存内容仍然是新的,而无需再次生成或发送内容。内容再次变得新,循环继续。
HTTP协议允许缓存在某些情况下提供过时数据,例如当尝试使用源服务器刷新数据时出现5xx错误,或者另一个请求已经在刷新给定条目的过程中。在这些情况下,会在响应中添加警告标头。
Non Existent
如果缓存已满,则保留从缓存中删除内容以腾出空间的选项。内容可以随时删除,可以是旧或新。htcacheclean工具可以一次性运行,或者作为守护程序部署,以使缓存的大小保持在给定大小或给定数量的inode内。在尝试删除新内容之前,该工具会尝试删除旧内容。
与服务器的交互mod_cache模块在两个可能的位置挂钩到服务器,具体取决于CacheQuickHandler指令的值:
快速处理阶段
这个阶段在请求处理期间很早就发生,就在解析请求之后。如果在缓存中找到内容,则立即提供该内容,并且几乎所有请求处理都被绕过。
在这种情况下,缓存的行为就像它已经“闩上”到服务器的前面一样。
此模式提供最佳性能,因为绕过了大多数服务器处理。但是,此模式也会绕过服务器处理的身份验证和授权阶段,因此在重要时应谨慎选择此模式。
当mod_cache在此阶段运行时,具有“授权”标头(例如,HTTP基本身份验证)的请求既不可缓存也不从缓存提供。
正常处理阶段
在所有请求阶段完成之后,此阶段在请求处理的后期发生。在这种情况下,缓存的行为就像它已经“闩上”到服务器的后面一样。
此模式提供了最大的灵活性,因为缓存可能存在于过滤器链中的精确控制点,并且缓存的内容可以在发送到客户端之前进行过滤或个性化。
如果在缓存中找不到URL,mod_cache将向筛选器堆栈添加一个筛选器,以便记录对缓存的响应,然后停止,允许正常的请求处理继续。如果确定内容是可缓存的,则将内容保存到缓存中以供将来服务,否则将忽略该内容。
如果在

最低0.47元/天 解锁文章
517

被折叠的 条评论
为什么被折叠?



