概述
本章,您将学习到 Apache httpd 的静态缓存功能。
静态文件通常指内容不随请求动态变化的文件,常见如图片、JS、CSS 等,存放在 Web 服务器上。当浏览器首次访问站点时,这些静态文件会被下载并根据服务器配置的缓存策略缓存到本地,当再次访问相同站点时,若缓存未过期则无需重新下载,从而加快访问速度。但是静态文件不宜一直被浏览器缓存,需要在 Web 服务器上配置缓存的有效时间,这既保证用户能及时获取更新后的内容,又能减轻服务器负担。
术语解释
缓存:计算机中非常常见的术语,指的是将频繁访问或可能再次访问的数据临时存放在比原始数据源更快的存储介质中(如 CPU 缓存、内存、本地磁盘文件、CDN 节点等),当下次再次访问相同资源时,直接从缓存中读取,从而加快访问速度。缓存在不同上下文中可指代 CPU 缓存、内存缓存、磁盘缓存(本地文件缓存)、浏览器缓存、CDN 缓存、DNS 缓存等。
配置静态缓存
由于源代码编译 Apache httpd 时已经指定了 --enable-expires 选项,因此不再需要 apxs 命令进行操作(该命令用来对模块的源文件进行动态编译,使之成为 DSO 模块,因此当 Apache httpd 缺少相关功能或模块时,不再需要编译整个 Apache httpd 源代码):
Shell > cat /usr/local/apache2/build/config.nice
#! /bin/sh
#
# Created by configure
"./configure" \
"--prefix=/usr/local/apache2/" \
"--enable-so" \
"--enable-ssl" \
"--enable-rewrite" \
"--with-apr=/usr/local/apr/bin/apr-1-config" \
"--with-apr-util=/usr/local/apr-util/bin/apu-1-config" \
"--with-pcre=/usr/local/pcre2/" \
"--with-zlib" \
"--with-openssl" \
"--enable-expires" \
"--enable-charset-lite" \
"--enable-mpms-shared=all" \
"$@"
若您在编译 Apache httpd 时未指定 --enable-expires 编译选项,可执行 apxs 命令的以下操作:
Shell > /usr/local/apache2/bin/apxs -a -i -c /usr/local/src/httpd-2.4.68/modules/metadata/mod_expires.c
-a- 此选项会自动增加一个 "LoadModule" 指令行到 httpd.conf 主配置文件中,以激活相关模块。若相关指令行已经存在,则启用它。-i- 执行安装操作并将相关的 .so 文件添加到 /usr/local/apache2/modules/ 目录中-c- 编译模块/usr/local/src/httpd-2.4.68/modules/metadata/mod_expires.c- 指定一个或多个模块的源文件(以 .c 结尾的文件)
检查主配置文件 httpd.conf 是否加载了相关模块:
Shell > vim /usr/local/apache2/conf/httpd.conf
...
LoadModule expires_module modules/mod_expires.so
...
该模块相关的配置段以及指令示例:
<IfModule expires_module>
ExpiresActive on
ExpiresByType image/gif "access plus 1 days"
ExpiresByType image/jpg "access plus 24 hours"
ExpiresByType image/png "access plus 24 days"
ExpiresByType text/css "now plus 1 hours"
ExpiresByType application/javascript "now plus 2 hours"
ExpiresDefault "access plus 1 days"
</IfModule>
指令参数中的 access 和 now 关键字是等同的,plus 关键字是可选的,时间关键字有:
- years
- months
- weeks
- days
- hours
- minutes
- seconds
在主配置文件 httpd.conf 文件的底部追加这些内容:
<IfModule expires_module>
ExpiresActive on
ExpiresByType image/gif "access plus 1 hours"
ExpiresByType image/jpg "access plus 2 hours"
ExpiresDefault "access plus 4 hours"
</IfModule>
当客户端访问后,在 Cache-Control 字段中则会有相关值:
Shell > curl -I http://192.168.100.20:80/5.jpg
...
Cache-Control: max-age=3600
Expires: ...
...
若使用的是 Google Chrome,使用快捷键 F12 打开开发者工具,接着输入相关的网址,在 Network 标签页下方的资源列表中选中相关的文件(js、css、jpg 等),即可在右侧的详情面板中找到相关的响应标头,如 Cache-Control、Expires 等字段。
版权声明:「自由转载-保持署名-非商业性使用-禁止演绎 3.0 国际」(CC BY-NC-ND 3.0)
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论










