/ 中存储网

Nginx服务器中通过referer设置防盗链

2014-04-04 08:35:01 来源:ITJS.CN
下面的内容包括:

1 Nginx Referer 模块

2 valid_referers 指令

3 测试Nginx 防盗链

1 Nginx Referer模块

当一个请求头的Referer字段中包含一些非正确的字段,这个模块可以禁止这个请求访问站点。

这个头可以随意的伪造,因此,使用这个模块并不能100%的阻止这些请求,绝大多数拒绝的请求来自一些典型的浏览器,可以认为这些典型的浏览器并不能提供一个”Referer”头,甚至是那些正确的请求。

2 valid_referers 指令

语法:valid_referers [none|blocked|server_names] …

默认值:no

使用字段:server, location

这个指令在referer头的基础上为 $invalid_referer 变量赋值,其值为0或1

可以使用这个指令来实现防盗链功能,如果valid_referers列表中没有Referer头的值, $invalid_referer将被设置为1。

参数可以使如下形式:

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

blocked 意为根据防火墙伪装Referer头,如:“Referer: XXXXXXX”。

server_names 为一个或多个服务器的列表,0.5.33版本以后可以在名称中使用“*”通配符

例如:

location /photos/ { 

  valid_referers none blocked www.mydomain.com *.mydomain.com; 

  if ($invalid_referer) { 

return   403; 

  } 

3 测试

3.1 正常的Referer

firefox 浏览器(get)/uploads/allimg/160713/1455006139-0.gif

3.1.1 请求头信息原始头信息

Accept    text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Encoding    gzip, deflate

Accept-Language    zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3

Connection    keep-alive

Host    bbs.test.com

User-Agent    Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1

3.1.2 nginx 日志格式

log_format  access  '$remote_addr - $remote_user [$time_local] "$request" ' 

'$status $body_bytes_sent "$http_referer" ' 

'"$http_user_agent" $http_x_forwarded_for'; 

3.1.3 nginx 日志referer字段

10.0.100.82 - - [24/Aug/2012:10:50:00 +0800] "GET / HTTP/1.1" 200 6166 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1" 192.168.4.33  #注意:"-" 表示referer空白,这里直接在浏览器打开一个图片 3.2. 使用Referer防盗链

3.2.1 nginx 代码

location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ 

{   

   valid_referers none blocked test.com *.test.com; 

   if ($invalid_referer) 

   {   

#rewrite ^/ http://$host/logo.png; 

return 403; 

   }   

   expires      300d;## 

3.2.2 firefox 浏览器 URL

URL:http://192.168.57.75/index.html cat /usr/local/nginx/html/index.html

<html> 

<head> 

<title>Welcome to nginx!</title> 

</head> 

<body bgcolor="white" text="black"> 

<center><h1>Welcome to nginx!</h1></center> 

<img  style="max-width:400px"  src="https://www.chinastor.cn/uploads/allimg/160713/1455006139-0.gif"> 

</body> 

</html> 

注意:index.html 包含noavatar_small.gif

3.2.3 请求头信息原始头信息

Accept    image/png,image/*;q=0.8,*/*;q=0.5

Accept-Encoding    gzip, deflate

Accept-Language    zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3

Connection    keep-alive

Host    bbs.test.com

Referer    http://192.168.57.75/

User-Agent    Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1

3.2.4 nginx 日志referer字段

192.168.4.33 - - [24/Aug/2012:10:55:05 +0800] "GET /uc_server/images/noavatar_small.gif HTTP/1.1" 403 162 "http://192.168.57.75/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1" -

注意:返回403 状态码