已删除许久的图片仍出现在错误日志中,原因何在?
定位Nginx文件不存在错误的源头方法
抓请求来源细节
日志里的client: 40.111.21.45是核心线索,直接用whois 40.111.21.45查IP归属,判断是爬虫、普通用户还是内部服务。另外给Nginx配置添加UA日志,看看请求来自浏览器、搜索引擎爬虫还是恶意扫描工具——多数情况下是搜索引擎缓存或爬虫在抓取旧内容。排查网站内部残留引用
即便删除了数据库里的附件,仍可能有遗漏:- 清空WordPress的所有缓存,包括插件缓存、CDN缓存,缓存中的旧页面大概率还在引用已删除的文件。
- 用服务器搜索命令遍历网站目录:
grep -r "/wp-content/uploads/2019/12/my-image-11.jpg" /www/mydomain/public/,主题文件、自定义模板、插件里的硬编码链接很容易被忽略。 - 别忘了检查WordPress的草稿、回收站文章,这类未发布内容也可能被爬虫抓取。
核查外部与缓存的旧链接
- 外部网站可能仍链接着你的旧图片,或搜索引擎缓存了旧页面。直接在搜索引擎中搜索该图片链接,查看是否有残留快照。
- 检查RSS订阅内容,旧的RSS推送可能仍被客户端订阅,导致持续请求已删除文件。
关联Nginx访问日志
错误日志里的*1253339是请求ID,用这个ID去访问日志中检索:grep "1253339" /var/log/nginx/access.log,能看到请求的Referer(来源页面),直接定位到带旧链接的页面。临时添加详细日志抓信息
修改Nginx对应server块的配置,新增详细日志格式,记录Referer和UA信息:log_format detailed '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/mydomain_access.log detailed;重启Nginx后,新日志里的Referer会直接显示请求来源,快速定位问题。
内容的提问来源于stack exchange,提问作者Krisztian Toth
相关产品推荐
相关产品推荐

