Nginx日志中的缓存问题定位与解决
一、先明确是哪一类缓存
二、日志写入缓存问题与优化
location ~* \.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico|eot|ttf|otf|woff|svg|js|css)$ {
expires 7d;
access_log off;
}
三、反向代理缓存命中率问题的定位与优化
proxy_cache_path /opt/app/cache levels=1:2 keys_zone=mycache:10m max_size=10g inactive=60m use_temp_path=off;
proxy_cache mycache;
proxy_cache_valid 200 304 12h;
proxy_cache_valid any 10m;
proxy_cache_key $host$uri$is_args$args;
add_header Nginx-Cache "$upstream_cache_status";
常见状态含义:HIT(命中)、MISS(未命中)、EXPIRED(过期)、UPDATING(更新中)、STALE(陈旧可用)。# 统计 HIT 占比
awk '{if($NF=="HIT") hit++} END {printf "%.2f%%\n", hit/NR*100}' access.log
# 统计昨日 HIT/总请求
LOG=/var/log/nginx/access.log.1
HIT=$(awk '/HIT/ {h++} END {print h+0}' "$LOG")
TOTAL=$(awk 'END {print NR}' "$LOG")
printf "%.2f%% (%d/%d)\n" $(echo "$HIT*100/$TOTAL" | bc -l) $HIT $TOTAL
四、快速排查清单与推荐配置
http {
# 1) 访问日志缓冲
access_log /var/log/nginx/access.log main buffer=32k flush=1m;
# 2) 打开文件句柄缓存(按并发与文件数评估)
open_log_file_cache max=1000 inactive=20s min_uses=3 valid=1m;
# 3) 反向代理缓存
proxy_cache_path /opt/app/cache levels=1:2 keys_zone=mycache:10m max_size=10g inactive=60m use_temp_path=off;
server {
location / {
proxy_pass http://backend;
proxy_cache mycache;
proxy_cache_valid 200 304 12h;
proxy_cache_valid any 10m;
proxy_cache_key $host$uri$is_args$args;
add_header Nginx-Cache "$upstream_cache_status";
}
# 4) 降低静态资源日志与开启浏览器缓存
location ~* \.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico|eot|ttf|otf|woff|svg|js|css)$ {
expires 7d;
access_log off;
}
}
}
提示:变更配置后使用 nginx -t 校验并重载;对生产环境建议先在灰度/低峰期验证。