参考一种新的可应对空白 referer 的防盗链策略,但是在原文配置中依旧不能解决盗链网站占用自己资源的问题,而且有的cdn不能正常传递referer(所以我换成了cloudflare),所以我额外进行了一步,并进行了优化,原配置文件是这篇文章里下面评论中的v2配置做了些许改动。
直接放配置,有针对各配置的说明
Caddyfile
xxx.com {
@img {
path_regexp .\.(jpg|jpeg|gif|png)$
}
header @img {
Cache-Control no-cache
Content-Security-Policy origin-when-cross-origin
Referrer-Policy origin-when-cross-origin
}
@nonereferer {
header !Referer
header Accept image*
path_regexp .\.(jpg|jpeg|gif|png)$
}
@wrongref {
header Referer *
not header Referer *.xxx.com/*
path_regexp .\.(jpg|jpeg|gif|png)$
}
#以下两行需要自己制作图片然后修改
redir @nonereferer https://fangdaolian.njj0121.com/
redir @wrongref https://fangdaolian.njj0121.com/
root * image
file_server
}这是一段可以直接插入已有网站内的配置,对于单独的图床域名也是一样。
配置的说明
修改响应头Cache-Control,让所有图片在读取缓存前向服务器发起请求,如果缓存和服务器匹配就返回304代码,不匹配就重新请求,如果有人从别的网站看到了盗链图片,然后来到了真正的网站,就不会出现缓存盗链图片的事情了,304不是很占用资源。
响应头Content-Security-Policy和Referrer-Policy是为了让浏览器正常发出referer,自己网站都不发出referer就会看到盗链图片了。
然后下面所有的配置都是为了处理referer是否和自己域名匹配。
精通nginx应该能发现这些配置在nginx上也可以很好的实现,不过配置比caddy要长得多。