NGINX实现图片防盗链(REFERER指令)

Posted wuditnt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NGINX实现图片防盗链(REFERER指令)相关的知识,希望对你有一定的参考价值。

nginx referer指令简介

nginx模块ngx_http_referer_module通常用于阻挡来源非法的域名请求.我们应该牢记,伪装Referer头部是非常简单的事情,所以这个模块只能用于阻止大部分非法请求.我们应该记住,有些合法的请求是不会带referer来源头部的,所以有时候不要拒绝来源头部(referer)为空的请求.

图片防盗链一般配置:

location ~* \\.(jpg|jpeg|bmp|gif|png|css|js|ico|webp|tiff|ttf|svg) {
    valid_referers none blocked *.wuditnt.com wuditnt.com ~\\.google\\. ~\\.baidu\\.;
    if ($invalid_referer) {
        return 403;
        #rewrite ^/ http://XXXX/403.gif; ##这个图片不能被防盗链,不能显示不正常。除非把上面的GIF过滤删除。
    }
    expires 30d;
}

以上所有来至*.wuditnt.com和域名中包含google和baidu的站点都可以访问到当前站点的图片,如果来源域名不在这个列表中,那么$invalid_referer等于1,在if语句中返回一个403给用户,这样用户便会看到一个403的页面,如果使用下面的rewrite,那么盗链的图片都会显示403.gif。如果用户直接在浏览器输入你的图片地址,那么图片显示正常,因为它符合none这个规则.

!!注意: http://XXXX/403.gif; ##这个图片不能被防盗链,不然显示不正常,会出现重复过滤。

除非把上面(jpg|jpeg|bmp|gif|png|css|js|ico|webp|tiff|ttf|svg) 中的gif过滤删除。

 

 

语法说明

valid_referers none | blocked | server_names | string …;
默认值: —
配置段: server, location
指定合法的来源’referer’, 他决定了内置变量$invalid_referer的值,如果referer头部包含在这个合法网址里面,这个变量被设置为0,否则设置为1.记住,不区分大小写的.

参数说明

none:“Referer” 来源头部为空的情况
blocked:“Referer”来源头部不为空,但是里面的值被代理或者防火墙删除了,这些值都不以http://或者https://开头.
server_names:“Referer”来源头部包含当前的server_names(当前域名)
arbitrary string:任意字符串,定义服务器名或者可选的URI前缀.主机名可以使用*开头或者结尾,在检测来源头部这个过程中,来源域名中的主机端口将会被忽略掉
regular expression:正则表达式,~表示排除https://或http://开头的字符串.

测试图片:

技术分享图片








以上是关于NGINX实现图片防盗链(REFERER指令)的主要内容,如果未能解决你的问题,请参考以下文章

nginx的valid_referers指令——防盗链

Nginx防盗链

nginx 防盗链简单配置

Nginx防盗链模块ngx_http_referer_module

nginx 图片防盗链 设置

nginx图片及目录防盗链设置