欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

nginx利用referer指令实现防盗链配置

程序员文章站 2024-02-01 07:58:40
实现图片防盗链: location ~* \.(gif|jpg|png|webp)$ { valid_referers none blocked doma...

实现图片防盗链:

location ~* \.(gif|jpg|png|webp)$ {
   valid_referers none blocked domain.com *.domain.com server_names ~\.google\. ~\.baidu\.;
   if ($invalid_referer) {
    return 403;
    #rewrite ^/ http://www.domain.com/403.jpg;
   }
   root /opt/www/image;
  }

以上所有来至domain.com和域名以及baidu和google的站点都可以访问到当前站点的图片,如果来源域名不在这个列表中,那么$invalid_referer等于1,在if语句中返回一个403给用户,这样用户便会看到一个403的页面,如果使用下面的rewrite,那么盗链的图片都会显示403.jpg。none规则实现了允许空referer访问,即当直接在浏览器打开图片,referer为空时,图片仍能正常显示.

[root@loya ~]# curl -i http://qingkang.me/1.jpg -h 'referer:http://www.baidu.com'
http/1.1 200 ok
server: nginx/1.8.1
date: fri, 16 dec 2016 14:56:51 gmt
content-type: image/jpeg
content-length: 17746
last-modified: tue, 16 aug 2016 03:20:21 gmt
connection: keep-alive
etag: "57b28675-4552"
accept-ranges: bytes
[root@loya ~]# curl -i http://qingkang.me/1.jpg -h 'referer:http://www.qq.com'
http/1.1 403 forbidden
server: nginx/1.8.1
date: fri, 16 dec 2016 14:56:58 gmt
content-type: text/html; charset=utf-8
content-length: 168
connection: keep-alive

指令

语法: valid_referers none | blocked | server_names | string …;

配置段: server, location

指定合法的来源'referer', 他决定了内置变量$invalid_referer的值,如果referer头部包含在这个合法网址里面,这个变量被设置为0,否则设置为1. 需要注意的是:这里并不区分大小写的.

参数说明:

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

注意

通过referer实现防盗链比较基础,仅可以简单实现方式资源被盗用。构造referer的请求很容易实现。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。