一、基础概念与准备工作
- 缓存的作用
缓存将频繁访问的资源存储在快速存储介质(如内存或磁盘)中,减少重复请求对服务器的压力,提升响应速度。 缓存类型
- 静态资源:图片、CSS、JS、HTML等固定文件。
- 动态内容:PHP生成的页面、API响应等后端计算结果。
环境准备
- Nginx安装:默认目录为
/etc/nginx,确保已安装Nginx(版本≥1.18)。 - 数据库支持:使用PDO_SQLite存储缓存元数据(需PHP支持)。
- Nginx安装:默认目录为
二、静态资源缓存配置
基础配置
在nginx.conf或站点配置文件(如/etc/nginx/sites-available/default)中添加以下内容:http { #静态文件缓存设置 server { listen 80; server_name example.com; root /var/www/html; #匹配常见静态文件类型 location ~* \.(jpgjpegpnggificocssjshtmlwebp)$ { expires 30d; #缓存30天 add_header Cache-Control "public, no-transform"; #允许公共缓存 add_header ETag ""; #禁用ETag验证(简化配置) access_log off; #关闭访问日志以提升性能 } } }参数说明:
expires:定义浏览器缓存时间。Cache-Control:控制中间代理和浏览器缓存行为。
版本控制优化
防止更新后的文件被旧缓存覆盖,可在文件名中添加哈希值(需结合构建工具),例如:<link href="/style.css?v=123456" rel="stylesheet">三、动态内容缓存配置
反向代理缓存
适用于PHP、Node.js等动态内容:http { #定义动态缓存区 proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=dynamic_cache:10m max_size=1g inactive=60m use_temp_path=off; server { location / { proxy_pass http://localhost:9000; #后端服务地址(如PHP-FPM) proxy_cache dynamic_cache; #启用缓存区 proxy_cache_key "$scheme$request_method$host$request_uri"; #唯一缓存键 proxy_cache_valid 200 302 10m; #成功响应缓存10分钟 proxy_cache_valid 404 1m; #404页面缓存1分钟 add_header X-Proxy-Cache $upstream_cache_status; #显示缓存命中状态 } } }关键指令:
proxy_cache_path:定义缓存路径、大小及失效时间。proxy_cache_valid:按HTTP状态码设置缓存时长。
FastCGI缓存(PHP专用)
针对PHP动态页面优化:http { fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=php_cache:10m; server { location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; #PHP-FPM地址 fastcgi_cache php_cache; #启用缓存 fastcgi_cache_valid 200 60m; #缓存60分钟 fastcgi_cache_use_stale error timeout updating; #容错机制 } } }四、高级优化技巧
缓存分层与热数据优化
- 使用多级缓存路径(
levels=1:2)提升文件查找效率。 - 通过
proxy_cache_min_uses 2设置至少被请求2次才缓存,避免冷数据占用资源。
- 使用多级缓存路径(
缓存锁与并发控制
防止多个进程同时写入缓存导致冲突:proxy_cache_lock on; #启用缓存锁 proxy_cache_lock_timeout 5s; #锁超时时间大文件分片传输
启用http_slice_module模块优化大文件(如视频)传输:location /videos/ { slice 1m; #分片大小1MB proxy_cache_key "$uri$slice_range"; proxy_set_header Range $slice_range; }五、安全与维护
敏感数据防缓存
在location块中添加规则,禁止缓存登录页或API:location /api/ { proxy_cache_bypass $http_cache_control; #根据请求头绕过缓存 proxy_no_cache $cookie_sessionid; #会话ID存在时不缓存 add_header Cache-Control "no-store"; #强制不缓存 }缓存清理策略
- 手动清理:删除
/var/cache/nginx目录下的文件。 自动化清理:使用
cron定时任务定期清理过期文件:0 3 * * * find /var/cache/nginx -type f -mtime +7 -delete
- 手动清理:删除
监控与日志
- 检查缓存命中率:
grep "X-Proxy-Cache" /var/log/nginx/access.log。 启用Nginx状态模块:
location /nginx_status { stub_status on; allow 127.0.0.1; #仅允许本机访问 deny all; }六、常见问题排查
- 检查缓存命中率:
缓存不生效
- 检查文件路径权限:
chown -R www-data:www-data /var/cache/nginx。 - 验证配置语法:
nginx -t。
- 检查文件路径权限:
动态内容更新延迟
缩短proxy_cache_valid时间,或通过URL添加版本号强制刷新:rewrite ^/article/(.*)$ /article/$1?v=20240508 last;
通过以上步骤,你可以快速搭建一个高效的Nginx缓存系统,显著提升网站性能。遇到问题时,优先检查日志和响应头中的X-Proxy-Cache状态。
评论 (0)