在开始缓存清理前,首先需要正确配置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_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_key "$scheme$request_method$host$request_uri";
}
}
}
# 删除特定缓存目录
sudo rm -rf /var/cache/nginx/*
# 或者更精确地删除特定URL的缓存
sudo find /var/cache/nginx -type f -delete
# 重新编译Nginx添加Purge模块
./configure --add-module=/path/to/ngx_cache_purge_module
make && make install
location ~ /purge(/.*) {
allow 127.0.0.1;
allow 192.168.1.0/24;
deny all;
proxy_cache_purge my_cache "$scheme$request_method$host$1";
}
使用方式:访问 http://example.com/purge/your-url
来清除特定URL的缓存
location / {
proxy_cache my_cache;
proxy_pass http://backend;
# 强制某些文件不缓存
location ~* \.(php|jsp|cgi)$ {
proxy_no_cache 1;
proxy_cache_bypass 1;
}
# 根据响应头设置缓存
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
# 设置缓存控制头
add_header X-Proxy-Cache $upstream_cache_status;
}
# 每天凌晨3点清理缓存
0 3 * * * root find /var/cache/nginx -type f -delete
proxy_cache_key "$scheme$request_method$host$request_uri$cookie_user";
location ~* /purge(/.*) {
proxy_cache_purge my_cache "$scheme$request_method$host$1";
}
分层缓存策略:
缓存清理自动化:
监控缓存命中率:
log_format cache_stats '$remote_addr - $upstream_cache_status [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
server {
access_log /var/log/nginx/cache.log cache_stats;
}
多级缓存:结合CDN和Nginx缓存,实现更灵活的缓存控制
问题1:缓存清理后网站仍然显示旧内容 - 检查CDN是否有额外缓存层 - 验证浏览器缓存是否影响 - 确认Nginx配置已重载
问题2:缓存清理导致服务器负载过高 - 限制Purge请求频率 - 考虑在低峰期执行批量清理 - 使用缓存预热机制
问题3:特定URL无法清理缓存 - 检查proxy_cache_key配置是否匹配 - 验证文件系统权限 - 检查是否有多个缓存区域配置冲突
通过以上配置和策略,您可以有效管理Nginx缓存,确保网站内容更新的及时性,同时保持高性能的缓存优势。