防盗链的实现方法
nginx防盗链配置
location ~.*\.(gif|jpg|png|flv|swf|rar|zip)${
valid referers none blocked test.com *.test.com;
if ($invalid_referer)
{
#return 403;
rewrite ^/ http://www.test.com/403.jpg;
}
}
传统防盗链遇到的问题(伪造Referer)
可以使用加密签名解决
location ~.*\.(gif|jpg|png|flv|swf|rar|zip)${
accesskey on;
accesskey_hashmethod md5;
accesskey_arg sign;
accesskey_signature "jason$remote_addr";
expires 30d;
}
<?php
$sign = md5('jason'.$_SERVER['REMOTE_ADDR]);
echo '<img src="./logo_new.png?sign='. $sign.'">';
本作品采用《CC 协议》,转载必须注明作者和本文链接
高认可度评论:
发散一下,nginx有个internal语法。可以让指定location必须被重定向访问。
比如视频播放场景:
当访问:
http://domain/videos/test.mp4
无法直接访问。正确的访问方法是:访问到某个api接口,然后接口返回
X-Accel-Redirect
如PHP:访问 /test.php 则实际访问的是 /videos/test.mp4.
由此,可以在php里实现复杂的认证逻辑比如播放次数、ip、登录权限、用户身份等等。
发散一下,nginx有个internal语法。可以让指定location必须被重定向访问。
比如视频播放场景:
当访问:
http://domain/videos/test.mp4
无法直接访问。正确的访问方法是:访问到某个api接口,然后接口返回
X-Accel-Redirect
如PHP:访问 /test.php 则实际访问的是 /videos/test.mp4.
由此,可以在php里实现复杂的认证逻辑比如播放次数、ip、登录权限、用户身份等等。