概述
本章,您将学习 Nginx 的静态缓存功能。
静态文件通常指内容不随请求动态变化的文件,常见如图片、JS、CSS 等,存放在 Web 服务器上。当浏览器首次访问站点时,这些静态文件会被下载并根据服务器配置的缓存策略缓存到本地,当再次访问相同站点时,若缓存未过期则无需重新下载,从而加快访问速度。但是静态文件不宜一直被浏览器缓存,需要在 Web 服务器上配置缓存的有效时间,这既保证用户能及时获取更新后的内容,又能减轻服务器负担。
术语解释
缓存:计算机中非常常见的术语,指的是将频繁访问或可能再次访问的数据临时存放在比原始数据源更快的存储介质中(如 CPU 缓存、内存、本地磁盘文件、CDN 节点等),当下次再次访问相同资源时,直接从缓存中读取,从而加快访问速度。缓存在不同文档上下文中可指代 CPU 缓存、内存缓存、磁盘缓存(本地文件缓存)、浏览器缓存、CDN 缓存、DNS 缓存等。
相关指令
要开启 Nginx 的静态缓存功能,有以下两种方式:
expires指令 - 当响应代码为 200、201、204、206、 301、302、303、304、307 或 308时,启用或禁用或修改或添加响应头中的 "Expires" 和 "Cache-Control" 字段。语法为expires [modified] time;或expires epoch | max | off;,默认为expires off;。时间单位后缀可以是 s、m、h、d、w、M、y,分别指秒、分、时、天、周、月、年add_header指令 - 当响应代码为 200、201、204、206、 301、302、303、304、307 或 308时,则将指定的字段添加到响应头中。语法为add_header name value [always];。
这些指令可配置在 http、server、location 上下文中,但是我们通常都会将它们配置在 location 上下文中。
expires 指令
修改主配置文件 nginx.conf 的内容:
Shell > vim /usr/local/nginx/conf/nginx.conf
user nginx;
worker_processes 4;
error_log logs/error.log error;
pid logs/nginx.pid;
worker_rlimit_nofile 7400;
events {
use epoll;
worker_connections 1024;
multi_accept on;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
sendfile on;
tcp_nopush on;
keepalive_timeout 30;
gzip on;
gzip_vary on;
gzip_buffers 32 4K;
gzip_comp_level 5;
gzip_types text/plain text/css text/xml application/json application/javascript application/xml application/xhtml+xml image/svg+xml application/x-font-ttf application/x-font-opentype application/vnd.ms-fontobject font/woff;
gzip_min_length 256;
server {
listen 192.168.100.20:80;
server_name www.games.com;
access_log logs/games-access.log main;
charset utf-8;
location / {
root /html/games/;
index index.html index.htm;
}
location ~* \.(jpg|css|jpeg|xml|js|gif) {
expires 4h;
}
}
}
location 匹配 URI 时,有两大类的匹配模式(通过不同的修饰符进行区别):
-
前缀字符串
=- 精准匹配^~- 优先前缀匹配- 无修饰符 - 普通前缀匹配,用来处理其他所有未明确匹配的请求。如
location / {...}
-
正则表达式
~- 区分大小写的正则表达式匹配~*- 不区分大小写的正则表达式匹配
关于这个 location 上下文匹配 URI(统一资源标识) 的优先级以及相关的说明,后面文档会有具体说明。
验证
配置完成后,可通过以下命令验证静态缓存是否生效:
# 检查 Cache-Control 和 Expires 响应头字段是否符合预期
Shell > curl -I https://www.example.com/main.js
您也可以通过 Google Chrome 的 F12 快捷键进入到开发者页面,在 Network 标签页下方的资源列表中选中相关的文件(js、css、jpg等),即可在右侧的详情面板中找到相关的响应标头。
版权声明:「自由转载-保持署名-非商业性使用-禁止演绎 3.0 国际」(CC BY-NC-ND 3.0)
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论










