怎样在Nginx上设置防盗链

2019年10月28日 | 分类: 【技术】

参考:https://blog.jiajieit.net/lnmp-nginx-valid-referers/

Nginx 自带防盗链功能:valid_referers 。

方法:在 server 或 location 段中加入:

valid_referers none blocked server_names

none:表示空的来路,也就是直接访问,比如直接在浏览器打开一个图片。
blocked:表示被防火墙标记过的来路。
server_names:是域名,可以用*.demo.com来表示所有的二级域名。

例如:

location ~ *\.(wma|wmv|asf|mp3|mp4|mmf|zip|rar|jpg|gif|png|swf|flv)$ {
        valid_referers none blocked *.ao.ci ao.ci;
  if ($invalid_referer) {
      rewrite ^/ /404.jpg;
      #return 403;
  }
}

重启 Nginx 提示:

nginx: [emerg] unknown directive "if($invalid_referer)" in /usr/local/nginx/nginx.conf:50

方法:if和后面括号以及变量等号这些元素都要有空格

第一行:wma|gif|jpg|png|swf|flv,表示对wma、gif、jpg、png、swf、flv后缀的文件实行防盗链
第二行:server_names,表示允许访问的来路 *.ao.ci,ao.ci这2个来路进行判断(*代表任何,任何的二级域名)
第三行:if{}里面内容的意思是,如果来路不是指定来路就跳转到403错误页面,当然直接返回404也是可以的,也可以是图片。

禁止IP访问,配置如下:

server {
listen       80;
return       444;
}

Nginx 针对的目录的防盗链:

[shell]
location /img/ {
root /data/img/;
valid_referers none blocked *.demo.com demo.com;
if ($invalid_referer) {
rewrite  ^/  http://www.demo.com/images/error.gif;
#return   403;
}
}