使用nginx配置防盗链,有两种途径,一种是通过自身所提供的功能,一种是通过第三方提供的模块。

 自身所提供的功能配置方法如下:

 

   
   
   
   
  1. location / { 
  2.    root /data/download/; 
  3.    valid_referers none blocked server_names *.com ; 
  4.    if ($invalid_referer) {return 403;} 

 

   
   
   
   
  1. location ~ .*\.(gif|jpg|jpeg|png|bmp|wma|mp3|swf)$ { 
  2.       valid_referers none blocked server_names *.163.com 163.com baidu.com; 
  3.       if ($invalid_referer) {return 403;} 
  4.     expires      30d; 

 

valid_referers none blocked 指的是不阻止指定的来源,none是说以空格指定多个源,
如*.163.com 163.com baidu.com。

这个不重点说明,需要重点研究的是nginx的HttpAccessKeyModule模块。

但是在介绍这个模块之前,需要配置nginx以支持php,配置方法如下:

   
   
   
   
  1. [root@lvs nginx]#wget http://www.lighttpd.net/download/spawn-fcgi-1.6.0rc1-r16.tar.gz 
  2. [root@lvs nginx]#tar zxvf spawn-fcgi-1.6.0rc1-r16.tar.gz 
  3. [root@lvs nginx]#cd spawn-fcgi-1.6.0 
  4. [root@lvs nginx]#./configure && make && make install 
  5.  
  6. [root@lvs nginx]#spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u nginx -g nginx -f /usr/bin/php-cgi 
nginx支持PHP的方式其实就像是反理代理的方式,nginx将php的请求发送到fastcgi进程监听的端口和地址,
由factcgi进程来解析PHP,nginx本身是不解析PHP文件的。
而fastcgi我们用了spawn-fcgi来实现,spawn-fcgi以前是集成在lighttpd中的,现在已经独立出来了,
可以单独下载安装。
所以,我们需要在nginx.conf文件中配置:


   
   
   
   
  1. location ~ \.php$ { 
  2.         root /usr/local/nginx/html; 
  3.         fastcgi_pass 127.0.0.1:9000; 
  4.         fastcgi_index index.php; 
  5.         fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; 
  6.         include fastcgi_params; 

然后,我借用并修改了网上流传比较多的PHP 脚本来做测试 :

 

   
   
   
   
  1. [root@lvs html]# pwd 
  2. /usr/local/nginx/html 
  3. [root@lvs html]#  
  4. [root@lvs html]# cat download.php  
  5. php 
  6.  
  7. $ipkeyvalue = md5("mypass".$_SERVER['REMOTE_ADDR']); 
  8. $out_keyfile_link=">downloada><br />"; 
  9. echo $out_keyfile_link; 
  10. echo "http://192.168.182.131/testfile.rar?key=".$ipkeyvalue.""; 
  11.  
  12. ?> 
  13. [root@lvs html]#  

 

接着访问:http://192.168.182.131/download.php

效果图如下:

 

可以看到这个KEY了,这个KEY是根据你的IP和一些字符串做md5合成的。这样子做之后,如果你复制这个链接给其它网站,其它人是无法通过这个链接来下载资源的,为什么呢,大家应该都清楚了,别人的IP不一样,PHP的脚本一经判断就知道是有盗链了。