Nginx 防盗链设置

何谓‘盗链’

此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容。 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。

比较明显的是图片资源,自己的服务器不存储图片资源,而使用别人的图片资源,这样无需承担图片的存储跟流量所产生的费用。总之,是非常无耻的行径。

如何防盗链

要实现防盗链,需要了解HTTP协议中的请求头部 Referer 头域和采用 URL 格式表示访问当前网页或者文件的源地址。通过该头域的值,我们可以检测到访问目标资源的源地址,即我们知道是谁在访问我们的资源。这样,如果检测到 Referer 头域中的值并不是自己站点的URL,就采取阻止措施,实现防盗链。

Nginx 指令 valid_referers

Nginx 配置中有一个指令 valid_referers ,用来获取 Referer 头域中的值,并且根据该值的情况给 Nginx 全局变量 $invalid_referer 变量将会被赋值为 1。valid_referers 指令的语法为:
valid_referers none | blocked | server_names | strings ....;

  • none, 检测 Referer 头域不存在的情况。
  • blocked,检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。这种情况该头域的值不以 “http://” 或 “https://” 开头。
  • server_names ,设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某一个。

有了 valid_referers 指令和 $invalid_referer 变量,就能通过 Rewrite 功能来实现防盗链。有两种实现方案,一种是根据请求资源的类型,一种是根据请求目录。以请求资源类型为例子:

location ~ .*\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|jpeg|png|swf|flv)$ {
    valid_referers none blocked *.myweb.com;
    if ($invalid_referer) {
	    rewrite ^/ http://www.myweb.com/logo.gif;
	    #return 403;
    }
}
posted @ 2017-08-06 23:19  码不能停  阅读(328)  评论(0编辑  收藏  举报