我之前删掉了图片后把服务器重启了一遍,这样理论上所有缓存都清除了,但图片还是可以访问,应该就不是缓存的问题了吧
cdn 那边缓存了原图,问cdn 那边要一下图片的md5值, 写个脚本把服务器上所有 md5 符合的图片扫一遍 看看找了删掉
原图就是https://iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png
我把图片的md5和sha1值都计算出来了,然后跟论坛所有图片的md5和sha1值一一比对,没有对得上的;还把论坛上所有头像下载下来肉眼对了一遍,也没有对得上的
可以拍一期走进科学了
即使cdn那边缓存了原图,当我访问https://iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png 时,这访问的也不是CDN,而是我本地的文件吧?
nginx 的缓存好像是以文件形式存储在配置里的proxy_cache_path路径下,重启不会消失.
另外我试了一下 https://iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png?a=1 是无法加载图片的,其他正常图片加了参数一样可以加载,例如这个https://iosre.com/user_avatar/iosre.com/wzqwzq666/135/5914_2.png?a=1 .
可以说明这个违规头像应该就是缓存文件.
再加上在缓存有效期内你或者别人不断的访问导致一直不过期才出现这种情况.(这是我猜的
这个缓存文件在哪里呢?
我先用find ./ -name nginx.conf
找出了所有的nginx.conf文件,然后挨个打开,但是都没有看到proxy_cache_path
这个字段,不知道是怎么回事
看看这个地方 /var/nginx/cache
如果nginx.conf 里没有,你需要去 nginx.conf 内include里去找.conf 文件,里面肯定有,就算没有也应该有这个网站相关的配置.
没有这个路径
root@iosre:/var# cd /var/nginx/cache
-bash: cd: /var/nginx/cache: No such file or directory
root@iosre:/var# cd cache
root@iosre:/var/cache# ls
apparmor apt apt-xapian-index debconf dictionaries-common ldconfig man nscd pppconfig
还是要找到配置,后面跟的就是路径. 类似这种
proxy_cache_path /var/nginx/cache inactive=1440m levels=1:2 keys_zone=one:10m max_size=600m;
好,我找找看,不行我就全局grep
一下proxy_cache_path
nginx.conf 里一般有一条 include /etc/nginx/conf.d/*.conf; 找到以后去/etc/nginx/conf.d/ 下,所有 conf 后缀的配置都是生效的,里面也许有.
在/etc/nginx/nginx.conf
下找到了include /etc/nginx/conf.d/*.conf;
,然后
root@iosre:/etc/nginx/conf.d# ls
default.conf discourse.conf
但是这两个文件里都没有proxy_cache_path
字段
我全局grep
一下吧
discourse.conf 里有没有 location ~ ^/(svg-sprite/|letter_avatar/|letter_avatar_proxy/|user_avatar|highlight-js|stylesheets|theme-javascripts|favicon/proxied|service-worker) {
我看的是最新版的程序里面给的 nginx 配置里在这个下面配置了缓存.
受你的启发,我在discourse这个app里面找到了/var/nginx/cache
root@iosre:/var/discourse/shared# /var/discourse/launcher enter app
WARNING: Docker version 17.05.0-ce deprecated, recommend upgrade to 17.06.2 or newer.
root@iosre-app:/var/www/discourse# cd /var/nginx/cache
root@iosre-app:/var/nginx/cache# ls
0 1 2 3 4 5 6 7 8 9 a b c d e f
root@iosre-app:/var/nginx/cache#
这些cache可以直接删掉吗?
我用find ./ -type f -print0 | xargs -0 md5sum > ./all.md5
把cache下的所有文件md5都算出来了,跟违规图片的md5对应,还是没有对得上的
不想删的话可以先备份一下然后删了,再试试还能不能访问.
或者改一下 docker 里 nginx 配置,改个路径.
牛比啊,我删除了cache下的所有文件
root@iosre-app:/var/nginx/cache# ls
root@iosre-app:/var/nginx/cache#
https://iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png 果然消失了。谢谢你啊!
也谢谢大佬办的这个网站.希望以后不会被这些人搞得要 fq 才能访问.