如何在VPS上使用Apache模块配置内容缓存
什么是网络缓存
Web 缓存是一种提高服务器性能的方法,它允许将常用请求的内容存储在更易于访问的位置。 这允许访问者更快地访问内容,而不必多次获取相同的数据。
通过有效地创建缓存规则,将存储适合缓存的内容以节省资源,同时正常提供高动态内容。 在本指南中,我们将讨论如何使用其缓存模块配置 Apache。
注意:本指南是为 Apache 2.2 编写的。 对 Apache 2.4 的更改导致替换了本指南中讨论的一些模块。 由于这一考虑,并非下面推荐的所有步骤都适用于 Apache 2.4 安装。
Apache 中的缓存简介
Apache 有许多不同的方法来缓存经常访问的内容。 启用此功能的两个最常见的模块称为“mod_cache”和“mod_file_cache”。
mod_file_cache 模块
mod_file_cache 模块是两种缓存机制中较简单的一种。 它通过缓存以下内容来工作:
- 经常被要求
- 很少更改 非常
如果满足这两个要求,那么 mod_file_cache 可能会有用。 它通过在服务器启动时对常用文件执行一些文件访问操作来工作。
mod_cache 模块
mod_cache 模块提供 HTTP 感知缓存方案。 这意味着文件将根据指定页面可以被视为“新鲜”多长时间的指令进行缓存。
它使用“mod_mem_cache”模块或“mod_disk_cache”模块执行这些操作。 这些是比 mod_file_cache 更复杂的缓存模型,并且在大多数情况下更有用。
将 mod_file_cache 与 Apache 一起使用
mod_file_cache 模块对于缓存在当前 Apache 实例的生命周期内不会更改的文件很有用。 此模块使用的技术将导致在重新启动服务器之前不会应用任何后续更改。
这些缓存机制只能用于普通文件,因此动态生成的内容或由特殊内容处理程序生成的文件不会在这里工作。
该模块提供了两个指令,用于以不同方式完成缓存。
映射文件
MMapFile 是一个指令,用于创建文件列表,然后将这些文件映射到内存中。 这仅在服务器启动时完成,因此设置为使用此类缓存的所有文件都不得更改,这一点很重要。
您可以在服务器配置文件中设置这种类型的缓存。 这是通过在空格分隔的列表中指定要缓存在内存中的文件来完成的:
MMapFile /var/www/index.html /var/www/otherfile.html var/www/static-image.jpg
这些文件将保存在内存中,并在请求资源时从那里提供服务。 如果任何文件被更改,您需要重新启动服务器。
缓存文件
该指令通过打开列出的文件的句柄来工作。 它维护这些打开文件描述符的表,并使用它来缩短打开这些文件所需的时间。
同样,在服务器运行期间对文件的更改将不会被缓存识别。 原始内容将继续提供,直到服务器重新启动。
通过指定应使用此方法缓存的以空格分隔的文件列表来使用此指令:
CacheFile /this/file.html that/file.html another/file/to/server.html
这将导致这些文件在服务器启动时被缓存。
将 mod_cache 与 Apache 一起使用
mod_cache 模块是一个更加灵活和强大的缓存模块。 它通过对经常访问的文件实现 HTTP 感知缓存来发挥作用。
虽然所有缓存机制都依赖于以某种持久状态提供文件,但 mod_cache 可以通过配置文件对缓存有效的时间长度来处理变化的内容。
该模块依赖于其他两个模块来完成大部分缓存实现。 它们是“mod_disk_cache”和“mod_mem_cache”。
这两者之间的区别在于缓存的保存位置,分别是在磁盘上还是在内存中。 这些是使用基于 URI 的密钥存储和检索的。 请务必注意这一点,因为您可以通过打开规范命名来改进站点的缓存。
这可以通过将此指令放在服务器配置或虚拟主机定义中来完成:
UseCanonicalName On
如何配置缓存
我们将检查一些常见的配置指令以及它们如何影响缓存机制的功能。
如果您查看“/etc/apache2/mods-available”目录,您可以看到这些模块的一些默认配置文件。
配置 mod_mem_cache
我们看一下 mod_mem_cache 的配置:
sudo nano /etc/apache2/mods-available/mem_cache.conf
<IfModule mod_mem_cache.c> CacheEnable mem / MCacheSize 4096 MCacheMaxObjectCount 100 MCacheMinObjectSize 1 MCacheMaxObjectSize 2048 </IfModule>
These directives are only read if the mod_mem_cache module is loaded. This can be done by typing the following:
sudo a2enmod mem_cache sudo service apache2 restart
This will enable mod_mem_cache and also mod_cache.
CacheEnable mem /
“CacheEnable mem /”行告诉 apache 为存储在“/”下的内容创建内存缓存(即一切)。
MCacheSize 4096 MCacheMaxObjectCount 100
接下来的几行描述了缓存的总大小和将被存储的对象的种类。 “MCacheSize”指令和“MCacheMaxOjectCount”指令都描述了缓存的最大大小,首先是内存使用量,然后是最大对象数量。
MCacheMinObjectSize 1 MCacheMaxObjectSize 2048
接下来的两行描述了将被缓存的数据类型,就内存使用而言。 默认值指定将考虑缓存 1 字节到 2 KB 之间的文件。
配置 mod_disk_cache
我们可以通过检查 mod_disk_cache 配置文件来了解一组不同的指令:
sudo nano /etc/apache2/mods-available/disk_cache.conf
<IfModule mod_disk_cache.c> CacheRoot /var/cache/apache2/mod_disk_cache #CacheEnable disk / CacheDirLevels 5 CacheDirLength 3 </IfModule>
如果您启用 mod_disk_cache 模块,则会加载此配置,这可以通过键入来完成:
sudo a2enmod disk_cache sudo service apache2 restart
此命令还将启用 mod_cache 以正常工作。
CacheRoot /var/cache/apache2/mod_disk_cache #CacheEnable disk /
“CacheRoot”指令指定缓存内容的保存位置。 默认情况下禁用“CacheEnable disk /”指令。 建议您在虚拟主机的基础上启用此功能,以便更好地了解将缓存的内容。
CacheDirLevels 5 CacheDirLength 3
其他两个指令确定缓存根中的缓存结构。 每个缓存的元素都通过其 URL 进行散列,然后将散列用作文件名和目录路径。
CacheDirLevel 决定从哈希字符串创建多少个目录,而 CacheDirLength 决定每个目录名称中有多少个字符。
例如,如果您有一个散列为“abcdefghijklmnopqrstuvwxyz”的文件,则 CacheDirLevel 为 2 和 CacheDirLength 为 4 将导致该文件存储在:
[path_of_cache_root]/abcd/efgh/ijklmnopqrstuv
根据内容的到期日期,存储在磁盘上的缓存可能会变大。 Apache 包含一个名为“htcacheclean”的工具,用于将缓存缩减到配置的大小。 这超出了本指南的范围。
使用 CacheLock 避免压倒后端
当缓存资源过期时,繁忙的服务器可能会出现问题。
需要刷新的缓存必须从普通文件资源中重新获取文件。 在此期间,如果有更多的文件请求。 随着缓存版本的刷新,这可能会导致对后端服务器的请求激增。
为了避免这种情况,可以启用一个锁定文件,指示正在重新缓存资源并且后续请求不应发送到后端,因为正在解决问题。
这个锁可以防止apache在第一次缓存时多次尝试缓存同一个资源。 它还将为陈旧的资源提供服务,直到刷新缓存完成。
三个指令用于控制 CacheLock:
CacheLock [ On | Off ] CacheLockMaxAge [time_in_seconds] CacheLockPath [/path/to/lock/directory]
第一个指令打开该功能,第三个指令建立将创建资源锁的目录。
第二个指令 CacheLockMaxAge 用于确定锁定文件被视为有效的最长时间(以秒为单位)。 这在刷新资源失败或异常延迟的情况下很重要。
结论
Apache 中的缓存可以很简单,也可以根据您的需要涉及。 虽然任何类型的缓存都可以提高您的站点性能,但测试您的配置以确保它们正常运行非常重要。
熟悉配置不当的缓存的影响也很重要。 有时需要在实施缓存后重新评估您的安全实践,以确保不会意外缓存私有资源以供公共使用。
apache 用户文档有大量关于 如果遇到困难如何配置缓存 的信息。 即使您掌握了配置,它也是一个有用的参考和很好的资源。