配置防盗链初衷是多为节约服务器带宽资源及简单对网站资源进行防盗。
一、普通防盗链
ngx_http_referer_module模块:可根据header中的referer信息屏蔽某些请求对网站或应用的访问,可以起到禁止直接访问网站static files的作用(防盗链或保护文件)。
location ~ ^/img/.*.(gif|jpg|jpeg|png|bmp|swf)$ {
#valid_referers none blocked *.www.fity.cn *.test.com server_names ~\.google\. ~\.baidu\.;
valid_referers *.www.fity.cn *.xsimple.cn server_names ~\.google\. ~\.baidu\.;
if ($invalid_referer) {
#rewrite ^/ /res.jpg break;
return 502;
}
}
**PS:**以上所有来至www.fity.cn和域名中包含google和baidu的站点都可以访问到当前站点的图片等资源,如果来源域名不在这个列表中,那么$invalid_referer等于1,在if语句中返回一个502给用户,这样用户便会看到一个502的页面。注意:如果设置none参数,用户直接在浏览器输入你的图片地址,那么图片显示正常,因为它符合none这个规则。
参数说明:
valid_referers 代表可信referer,此处可信referer的设置将会使变量$invalid_referer的值为「0」,反之$invalid_referer的值为「1」,则执行IF条件名并返回相关限制结果。 none是指当referer为空的时候,比如在链接器中直接打开一个图片链接,若要禁止用户直接访问,则必须省掉none。 blocked 是指经过某些代理或firewall过滤后的referer,比如省略了url前缀等, 同样地,若要禁止用户直接访问,则必须省掉blocked。 server_names 是nginx配置文件中的server name项,代指网站域名。
二、URL地址校验防盗 secure_link模块:需要安装,url一般为动态url,不适用于图片防盗链。 **安装:** > ./configure --with-http_secure_link_module --prefix=/usr/local/nginx-1.4.2 --with-http_stub_status_module > make && make install
配置nginx:
server {
listen 80;
server_name www.fity.cn;
index index.html index.php;
root /data/website/www.fity.cn;
location / {
secure_link $arg_st,$arg_e;
secure_link_md5 www.fity.cn$uri$arg_e;
if ($secure_link = "") {
return 403;
}
if ($secure_link = "0") {
return 403;
}
}
}
链接地址生成(FOR PHP)
//nginx secure link链接生成
$secret = 'www.fity.cn'; # 密钥
$path = '/data/file/www.fity.cn_logs.tar.gz'; #文件
//下载到期时间,time是当前时间,120表示120秒,也就是说从现在到120秒之内文件不过期
$expire = time()+120;
//用文件路径、密钥、过期时间生成加密串
$md5 = base64_encode(md5($secret . $path . $expire, true));
$md5 = strtr($md5, '+/', '-_');
$md5 = str_replace('=', '', $md5);
//加密后的文件下载地址
echo '<a href="https://www.fity.cn/'.$path.'?st='.$md5.'&e='.$expire.'">日志文件下载</a>';