使用nginx配置防盗链,有两种途径,一种是通过自身所提供的功能,一种是通过第三方提供的模块。
自身所提供的功能配置方法如下:
- location / {
- root /data/download/;
- valid_referers none blocked server_names *.com ;
- if ($invalid_referer) {return 403;}
- }
- location ~ .*\.(gif|jpg|jpeg|png|bmp|wma|mp3|swf)$ {
- valid_referers none blocked server_names *.163.com 163.com baidu.com;
- if ($invalid_referer) {return 403;}
- expires 30d;
- }
valid_referers none blocked 指的是不阻止指定的来源,none是说以空格指定多个源, 如*.163.com 163.com baidu.com。 这个不重点说明,需要重点研究的是nginx的HttpAccessKeyModule模块。
但是在介绍这个模块之前,需要配置nginx以支持php,配置方法如下:
- [root@lvs nginx]#wget http://www.lighttpd.net/download/spawn-fcgi-1.6.0rc1-r16.tar.gz
- [root@lvs nginx]#tar zxvf spawn-fcgi-1.6.0rc1-r16.tar.gz
- [root@lvs nginx]#cd spawn-fcgi-1.6.0
- [root@lvs nginx]#./configure && make && make install
- [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文件中配置:
- location ~ \.php$ {
- root /usr/local/nginx/html;
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
- include fastcgi_params;
- }
然后,我借用并修改了网上流传比较多的PHP 脚本来做测试 :
- [root@lvs html]# pwd
- /usr/local/nginx/html
- [root@lvs html]#
- [root@lvs html]# cat download.php
- <?php
- $ipkeyvalue = md5("mypass".$_SERVER['REMOTE_ADDR']);
- $out_keyfile_link="<a href=http://192.168.182.131/testfile.rar?key=".$ipkeyvalue.">download</a><br />";
- echo $out_keyfile_link;
- echo "http://192.168.182.131/testfile.rar?key=".$ipkeyvalue."";
- ?>
- [root@lvs html]#
接着访问:http://192.168.182.131/download.php
效果图如下:
可以看到这个KEY了,这个KEY是根据你的IP和一些字符串做md5合成的。这样子做之后,如果你复制这个链接给其它网站,其它人是无法通过这个链接来下载资源的,为什么呢,大家应该都清楚了,别人的IP不一样,PHP的脚本一经判断就知道是有盗链了。