Nginx配置防盗链功能

什么是防盗链系统

盗链是指在自己的页面上展示一些并不在自己服务器上的内容。通常的做法是通过技术手段获得它人服务器上的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容。
比较常见的是一些小站盗用大站的资源(图片、音乐、视频、软件等),对于这些小站来说,通过盗链的方法可以减轻自己服务器的负担,因为真实的空间和流量均是来自别人的服务器。

防盗链系统就是防范盗链的系统,防止别人通过一些技术手段绕过本站的资源展示页面,盗用本站的资源,让绕开本站资源展示页面的资源链接失效。实施防盗链系统后,因为屏蔽了那些盗链的间接资源请求,从而可以大大减轻服务器及带宽的压力,也正如此,越来越多的站点都开始实施防盗链技术。

我配置这个功能只是让自己的图片资源不被爬虫爬取。

原理

http协议中有一个referer的头字段,采用URL的格式来表示当前请求的资源是从哪个链接过来的。换句话说,通过referer,网站可以检测目标网页访问的来源网页。

nginx实现对referer的检测

nginx有一个叫valid_referers的配置,详见这里

它可以效验http请求中referer的值。
全局变量invalid_referer,可以指示是否效验成功。

参考配置

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 80;
server_name img.fengcl.com;
root /tmp/;

location / {
valid_referers *.fengcl.com localhost;
if ($invalid_referer)
{
# rewrite ^/ http://xxx.fengcl.com/xxx.jpg;
return 403;
}
}

其它方法

采取NginxHttpAccessKeyModule模块。
基本原理就是在下发资源时,加上远程地址ip和key进行hash的参数,然后在accesskey模块中进行检测。

参考

http://www.cnblogs.com/wajika/p/6600223.html