说明:
通过rewrite实现nginx当访问站点图像时,如访问源不是本站就传送特定版权图像过去。做的时候发现不管怎么样,chrome都是显示重定向。
参考网上资料,发现rewrite的那个地址不能跟想要防盗链的域名相同(这是网上众多资料都没有讲到的),需要使用不同子域名,不然会一直重定向循环。
如这里,需要防盗链的域名www.gaingreat.com;版权图像地址:test.gaingreat.com/404.png;
实现:
在需要防盗链的server里添加以下内容。
location ~ .*.(gif|jpg|jpeg|png|bmp|swf|ico)$ { expires 30d; access_log off; valid_referers none blocked www.gaingreat.com; if ($invalid_referer) { rewrite ^/ http://test.gaingreat.com/404.png; #return 404; } }
附录:
这里附上有关Referer的解释:
valid_referers [none|blocked|server_names] … 默认none
这个指令在referer头的基础上为 $invalid_referer 变量赋值,其值为0或1。
可以使用这个指令来实现防盗链功能,如果valid_referers列表中没有Referer头的值, $invalid_referer将被设置为1(参照前例)。
none意为不存在的Referer头
blocked意为根据防火墙伪装Referer头,如:“Referer: XXXXXXX”。
server_names为一个或多个地址,多个地址www.gaingreat.com *.test.com;以这种格式,nginx 0.5.33版本以后可以在名称中使用*通配符。