Appearance
Proxy Cache配置
Proxy Cache可以缓存后端服务器的响应,减轻后端压力,提高响应速度。
基本配置
定义缓存路径
nginx
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;启用缓存
nginx
location / {
proxy_cache my_cache;
proxy_pass http://backend;
}完整配置
生产环境配置
nginx
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=proxy_cache:10m max_size=1g inactive=60m use_temp_path=off;
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
server {
listen 80;
server_name proxy.example.com;
location / {
proxy_cache proxy_cache;
proxy_cache_valid 200 60m;
proxy_cache_valid 404 1m;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header X-Cache-Status $upstream_cache_status;
}
}缓存参数
proxy_cache_path参数
levels
- 缓存目录层级
- 格式:1:2表示两级目录
keys_zone
- 缓存键共享内存区域
- 格式:名称:大小
max_size
- 最大缓存大小
- 超过后自动清理旧缓存
inactive
- 非活动时间
- 超时后删除缓存
use_temp_path
- 是否使用临时路径
- 推荐关闭以提高性能
proxy_cache_valid参数
nginx
proxy_cache_valid 200 60m;
proxy_cache_valid 404 1m;说明:
- 200响应缓存60分钟
- 404响应缓存1分钟
缓存键
默认缓存键
nginx
proxy_cache_key "$scheme$proxy_host$request_uri";自定义缓存键
nginx
proxy_cache_key "$scheme$request_method$host$request_uri";基于Cookie的缓存键
nginx
proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args";缓存控制
禁用缓存
nginx
location / {
proxy_no_cache 1;
proxy_pass http://backend;
}条件缓存
nginx
location / {
proxy_cache_bypass $http_cache_control;
proxy_pass http://backend;
}缓存特定状态码
nginx
location / {
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
proxy_pass http://backend;
}缓存清理
手动清理
bash
# 删除所有缓存
rm -rf /var/cache/nginx/*
# 删除特定缓存
find /var/cache/nginx -name "*.cache" -delete缓存清除模块
nginx
location /cache/ {
proxy_cache_purge $purge_method;
}缓存监控
查看缓存状态
nginx
add_header X-Cache-Status $upstream_cache_status;缓存状态值
- MISS:未命中缓存
- BYPASS:绕过缓存
- EXPIRED:缓存过期
- STALE:使用过期缓存
- UPDATING:正在更新缓存
- HIT:命中缓存
完整示例
生产环境配置
nginx
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=proxy_cache:10m max_size=1g inactive=60m use_temp_path=off;
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
server {
listen 80;
server_name proxy.example.com;
# 静态资源缓存
location ~* \.(jpg|jpeg|png|gif|css|js)$ {
proxy_cache proxy_cache;
proxy_cache_valid 200 7d;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_pass http://backend;
add_header X-Cache-Status $upstream_cache_status;
}
# API缓存
location /api/ {
proxy_cache proxy_cache;
proxy_cache_valid 200 60m;
proxy_cache_valid 404 1m;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_pass http://backend;
add_header X-Cache-Status $upstream_cache_status;
}
# 不缓存
location /admin/ {
proxy_no_cache 1;
proxy_pass http://backend;
}
}常见问题
缓存不生效
原因: 后端返回禁止缓存的头
解决: 忽略缓存头
nginx
proxy_ignore_headers Cache-Control Expires Set-Cookie;缓存未更新
原因: 缓存时间过长
解决: 缩短缓存时间或手动清理
nginx
proxy_cache_valid 200 60m;缓存命中率低
原因: 缓存key设置不当
解决: 优化缓存key
nginx
proxy_cache_key "$scheme$request_method$host$request_uri";总结
Proxy Cache配置的关键点:
- proxy_cache_path:定义缓存路径和参数
- proxy_cache:启用缓存
- proxy_cache_valid:设置缓存时间
- proxy_cache_key:设置缓存键
- 缓存控制:禁用或条件缓存
- 缓存监控:查看缓存状态
合理配置Proxy Cache,减轻后端压力,提高响应速度。