Nginx 可以通过多种方式配置页面缓存,以下是常见的几种缓存配置方法:
这是最常见的缓存方式,适用于反向代理场景:
http {
# 定义缓存路径和参数
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m use_temp_path=off;
server {
location / {
proxy_cache my_cache; # 使用上面定义的缓存区
proxy_pass http://backend; # 后端服务器地址
# 缓存键设置
proxy_cache_key "$scheme$request_method$host$request_uri";
# 缓存有效期
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
# 其他相关设置
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_background_update on;
proxy_cache_lock on;
# 添加缓存状态头信息
add_header X-Proxy-Cache $upstream_cache_status;
}
}
}
http {
fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=fastcgi_cache:100m inactive=60m;
server {
location ~ \.php$ {
fastcgi_cache fastcgi_cache;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_valid 200 60m;
fastcgi_cache_valid 404 10m;
fastcgi_cache_methods GET HEAD;
fastcgi_pass php_fpm;
add_header X-FastCGI-Cache $upstream_cache_status;
}
}
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
access_log off;
}
location ~* \.(pdf|doc|docx|xls|xlsx|ppt|pptx)$ {
expires 7d;
add_header Cache-Control "public";
}
适用于高流量网站,对动态内容进行短时间缓存:
proxy_cache_path /tmp/nginx levels=1:2 keys_zone=microcache:10m max_size=100m inactive=60m;
server {
location / {
proxy_cache microcache;
proxy_cache_valid 200 10s; # 只缓存10秒
proxy_cache_methods GET HEAD;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_pass http://backend;
}
}
可以设置缓存清除接口:
location ~ /purge(/.*) {
allow 127.0.0.1;
deny all;
proxy_cache_purge my_cache "$scheme$request_method$host$1";
}
proxy_cache_path
: 定义缓存存储路径和参数
levels
: 缓存目录层级keys_zone
: 共享内存区名称和大小inactive
: 缓存不活跃时间后自动删除max_size
: 缓存最大大小use_temp_path
: 是否使用临时路径proxy_cache_valid
: 为不同响应码设置缓存时间
$upstream_cache_status
: 可用于检查缓存命中状态
MISS
: 未命中HIT
: 命中EXPIRED
: 过期但还在使用UPDATING
: 正在更新STALE
: 使用过期的缓存配置完成后,记得测试缓存是否生效,可以通过检查响应头中的X-Proxy-Cache
或X-FastCGI-Cache
字段来确认。