nginx根据日志清除缓存脚本

最近要管理一个新网站 www.nehosoft.com,线上前端nginx服务用来做后端图片服务的缓存代理服务器,但后端图片服务器在对用户上传的图片进行处理以后,有时会出现图片无法显示等问题,当出现这种情况的时候,该图片,我们就不希望被nginx缓存,如果被缓存,则要被清除。
  分别用两种不同的脚本方案来解决:
  1.通过过滤日志中状态码正常(即200)及图片大小小于100字节的url路径去查找缓存路径,进而清除缓存,脚本如下:
  #!/bin/bash
  cache_path=/home/nginx/proxy_cache_dir
  logfile=/home/nginx/logs/access.log
  datetime=`date +%d/%b/%Y`
  logdir=/home/nginx/logs
  #查找出所有当天nginx日志中状态码为200,大小小于100字节且被缓存命中的url,并将其保存至url.list
  grep "$datetime" $logfile | awk '{if($9 == 200 && $10 < 100 && $NF ~ "HIT") print $7}' | sort -n | uniq > url.list
  for i in `cat url.list`
  do
  #根据nginx日志中过滤的url查找缓存目录,对缓存中的url作处理后,保存到cache.list文件中
  grep -a -r "$i" $cache_path| strings |grep "KEY: " | awk -F'KEY: ' '{print "http://"$2;}' | grep [a-zA-Z0-9]$ > cache.list
  #再次对url进行处理
  sed -i "s#1img.looklook.cn/#1img.looklook.cn:7086/purge/#" cache.list
  #清除缓存
  for url in `cat cache_list.txt`
  do
  curl "$url" | tee -a $logdir/purgelog/$(date +%y%m%d).log
  done
  done
  2.将nginx日志复制为一个副本,然后通过新的nginx日志跟副本的比较,对变化的一部分直接做awk处理
  #!/bin/bash
  F=/home/nginx/logs/access.log
  O=/home/nginx/logs/old.log
  if [ ! -f $O ]
  then
  cp $F $O
  exit 3
  fi
  diff $F $O | \
  awk '{if($10 ==200 && $11< 100 && $NF ~ "HIT") print "http://1img.looklook.cn:7086/purge"$8}' | sort | uniq | \
  awk '{system("curl \""$1"\"|tee -a /home/nginx/logs/purgelog/$(date +%y%m%d).log")}'
  cat $F > $O
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值