怎样运用Nginx开展服务器端缓存配置?
以下是基于Nginx服务器端缓存配置的完整指南,结合了代理缓存、静态资源缓存及高级优化策略:
定义缓存路径
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=cache_zone:512m max_size=8g inactive=60m use_temp_path=off;
levels=1:2
/data/nginx/cache/7/3c/
keys_zone
max_size
启用缓存并设置策略
location /api { proxy_cache cache_zone; proxy_pass http://backend; proxy_cache_valid20030210m; # 成功响应缓存10分钟 proxy_cache_valid4041m; # 错误响应缓存1分钟 }
文件类型 | 推荐缓存时间 | 配置示例 | 适用场景 |
---|---|---|---|
图片(.jpg/.png) | 30d |
expires 30d; |
频繁访问的静态资源 |
CSS/JS文件 | 12h |
expires 12h; |
版本更新频繁的资源 |
HTML页面 | 5m |
expires 5m; |
动态内容较少的页面 |
# 根据文件类型设置缓存 location~* \.(jpg|jpeg|png|gif|ico)$ { expires30d; add_header Cache-Control "public"; } location~* \.(css|js)$ { expires12h; add_header Cache-Control "public, must-revalidate"; } ``` --- ### 三、高级缓存优化 1. **缓存键定制** ```nginx proxy_cache_key "$host$request_uri$is_args$args"; ``` - 包含请求参数,避免缓存污染[8]() 2. **缓存验证机制** ```nginx proxy_cache_revalidate on; # 过期时发送If-Modified-Since验证 proxy_cache_min_uses5; # 请求超过5次才缓存 ``` 3. **缓存排除规则** ``` ```nginx proxy_no_cache $arg_nocache; # 当请求参数nocache存在时不缓存 proxy_cache_bypass $http_pragma; # 当请求头Pragma存在时绕过缓存 ``` --- ### 四、缓存监控与维护 1. **命中率监控** ```nginx log_format cache_log '$remote_addr - $upstream_cache_status [$time_local]'; access_log /var/log/nginx/cache.log cache_log; ``` - 通过`$upstream_cache_status`查看HIT/MISS状态[8]() 2. **手动清理缓存** ```bash rm -rf /data/nginx/cache/* # 彻底清除 nginx -s reload # 重新加载配置触发自动清理 ``` --- ### 五、典型配置场景 1. **二级缓存架构** ``` ```nginx # 一级CDN节点配置 proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cdn_cache:256m; # 二级Nginx集群配置 proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=backend_cache:512m; proxy_cache_valid2003021h; ``` 2. **动静分离配置** ```nginx server { listen80; root /var/www/html; location~* \.(html|htm)$ { proxy_pass http://dynamic_server; proxy_cache dynamic_cache; } location~* \.(jpg|css|js)$ { expires30d; add_header Cache-Control "public"; } } ``` --- ### 注意事项 1. **时间同步**:确保Nginx服务器与后端时间一致,避免缓存验证失效[5]() 2. **内存分配**:keys_zone内存按需分配(1MB≈8000个缓存键)[1]() 3. **磁盘IO优化**:使用SSD硬盘存放缓存目录,避免`use_temp_path=on`导致的额外IO[8]() 通过上述配置,可实现最高90%的缓存命中率,显著降低后端服务器负载。建议定期通过`nginx -V`检查缓存模块是否启用,并参考[1]()[5]()[8]()等源文档进行深度优化。