Apache缓存配置

本文将介绍如何使用Apache HTTP Server的缓存功能来加速Web和代理服务,同时避免常见问题和错误配置。

Apache HTTP服务器提供了一系列缓存功能,旨在以各种方式提高服务器的性能。

三态RFC2616 HTTP缓存
mod_cache及其提供者模块mod_cache_disk提供智能的HTTP感知缓存。内容本身存储在缓存中,mod_cache旨在遵守控制内容可缓存性的所有各种HTTP头和选项。mod_cache针对简单和复杂的缓存配置,可以在其中处理代理内容,动态本地内容,或者需要加速对可能较慢的磁盘上的本地文件的访问。

双状态键/值共享对象缓存

共享对象缓存API(socache)及其提供程序模块提供基于服务器范围的键/值共享对象缓存。这些模块旨在缓存低级别数据,例如SSL会话和身份验证凭据。后端允许数据在服务器范围内存储在共享内存中,或者数据中心内存储在缓存中,例如memcachedistcache

专门的文件缓存

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将向筛选器堆栈添加一个筛选器,以便记录对缓存的响应,然后停止,允许正常的请求处理继续。如果确定内容是可缓存的,则将内容保存到缓存中以供将来服务,否则将忽略该内容。

如果在

### 如何在 Ubuntu 上清空 Apache 服务器的缓存 在 Ubuntu 系统上运行 Apache 服务时,可能会遇到由于缓存机制导致页面更新无法即时生效的情况。以下是几种常见的解决方法: #### 修改 Apache 配置以禁用缓存 可以通过修改 Apache配置文件来防止其缓存静态资源或其他内容。通常情况下,Apache 的主要配置文件位于 `/etc/apache2/apache2.conf` 或者某些安装环境下可能命名为 `httpd.conf`[^1]。 可以在配置文件中加入以下指令以禁用缓存: ```apache <FilesMatch "\.(html|htm|js|css|php)$"> FileETag None Header unset ETag Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" Header set Pragma "no-cache" Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" </FilesMatch> ``` 上述代码通过设置 HTTP 响应头中的 `Cache-Control`, `Pragma`, 和 `Expires` 参数来确保客户端不会缓存指定类型的文件[^2]。 #### 使用 `.htaccess` 文件控制缓存行为 如果允许站点目录下的 `.htaccess` 文件覆盖全局配置,则可以创建或编辑该文件,并添加类似的缓存禁用规则。例如,在网站根目录下放置如下内容的 `.htaccess` 文件即可达到相同效果: ```apache Header set Cache-Control "no-cache, no-store, must-revalidate" Header set Pragma "no-cache" Header set Expires 0 ``` 这种方法适用于没有权限直接修改主配置文件的情况下[^3]。 #### 重启 Apache 服务 当调整了任何与缓存相关的参数之后,都需要重新启动 Apache 才能使改动生效。执行下面命令完成此操作: ```bash sudo service apache2 restart ``` 或者更简洁的方式: ```bash sudo systemctl restart apache2 ``` 对于部分场景而言,即使已经设置了无缓存策略,仍需手动清除旧有数据存储区域内的残留记录。具体做法取决于实际部署环境以及所使用的模块(如 mod_cache_disk)。一般建议先尝试以上方式;若问题依旧存在再深入排查其他潜在因素[^4]。 --- ### 总结 综上所述,要彻底清理 Apache 在 Ubuntu 下产生的缓存影响,可以从三个方面入手:一是合理设定响应头部信息阻止前端保存副本;二是适时刷新后台进程状态;三是必要时刻果断重载整个 Web Server 实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智慧浩海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值