nginx 防盗链配置

介绍

防止别人直接从你网站引用图片等链接,消耗了你的资源和网络流量,那么我们的解决办法由几种:

1:水印,品牌宣传,你的带宽,服务器足够

2:防火墙,直接控制,前提是你知道IP来源

3:防盗链策略下面的方法是直接给予404的错误提示

http refere

http referer 是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上referer,这是在告诉服务器是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理;

location /photos/ {
    valid_referers  none blocked 域名/IP;
    if ($invalid_referer) {
      return 403;
    }
}

Http Referer 模块的功能有:

valid_referers :该指令会根据浏览器Referer header头的内容分配一个值0或1给变量$invalid_referer ;

如果referer header 头不符合valid_referers指令设置的有效referer,变量$invalid_referer将被设置为1,那么便会执行if模块中的内容;

该指令的参数有:

none : 意思是不存在的Referer头(表示空的,也就是直接访问,比如直接在浏览器打开一个图片)

blocked :表示referer值被防火墙伪装;

server_names :表示一个或者多个主机名称,从nginx0.5.33版本开始,server_names中可以使用通配符*;

举例

location /photos {
    root /web/data;
    valid_referers none blocked localhost 域名/IP;
    if ($invalid_referer) {
        return 200 '{"code":1,"msg":"error"}';
    }
}

对以 /photos 开头的请求进行防盗链;

对 none blocked localhost 域名/IP 这个来路进行判断

if{}里面内容的意思是,如果不在 valid_referers中 就返回 '{"code":1,"msg":"error"}'

若 valid_referers none blocked 域名/IP; 中,none 存在;那么在浏览器直接访问域名下的该文件依然也可以访问

为了达到即使在浏览器中输入正确的图片路径,也不允许访问的状态;那么把none删除掉就Ok了!