防盗链别让别人白嫖你的图片和流量
你网站上的图片被别人直接嵌在他们自己的页面里,访客打开对方网站时,图片是从你的服务器加载的,流量和带宽全算在你头上,严重时账单暴涨、自己网站都变慢。这就叫盗链。本文讲清盗链是怎么发生的、怎么从日志里发现它、Nginx 和宝塔里怎么设防,以及防盗链防不住的那部分该怎么办。
先说它是怎么发生的。网页里的图片都是通过地址引用的,别人的网站只要把你图片的直链地址原样贴进他们的页面,访客一打开,浏览器就会去你的服务器要这张图。你这边不会收到任何通知,流量却在悄悄流失。站越小越吃亏:流量账单是按你的服务器算的,对方一分钱不花就蹭走了你的资源。发现它的办法是看访问日志:图片请求的 Referer 一栏里出现别人的域名,或者图片流量突然暴涨但自己站的访问量没涨,基本就是被盗链了。
防盗链的核心就一个动作:校验请求从哪来。浏览器请求一张图片时,会带上它是从哪个页面来的,也就是 Referer。Nginx 里用 valid_referers 写白名单,只放行自己的域名和空 Referer,其他来源一律返回 403,或者返回一张你准备好的提示图,告诉对方这张图被保护了。宝塔用户不用写配置,站点设置里就有防盗链开关,打开后填上允许的域名就行。CDN 层面也有同样的 Referer 白名单或黑名单设置,配在 CDN 上效果一样,还能顺手省下回源的流量。图片、视频、下载文件都可以这么防,HTML 页面本身一般不用防。
更进一步还有签名链接。给每个文件链接加一段带过期时间的签名,只有从你站里点出去的链接才有效,别人就算抄走了地址,过一会儿也打不开。这招适合付费资源、课程视频这类值钱的内容,普通图片用 Referer 校验就够了,签名链接要配合程序生成,成本更高。
最后说清防盗链的边界。Referer 校验防的是直链引用,别人把图片下载下来再上传到自己服务器,那就不是盗链而是内容盗用,技术手段防不住,要靠水印和事后维权。配置时还有两处容易踩坑:白名单别漏了自己的子域名和常用入口,有些场景的 Referer 是空的(用户直接点开图片、从聊天软件点链接),空 Referer 一般要放行,否则正常访客也会打不开图。配好后别光看开关,找个别人的页面实际嵌一张图测一遍,确认挡住了才算数。
- 点赞
- 收藏
- 关注作者
评论(0)