通过lua来配置实现Nginx服务器的防盗链功能
下载服务器时常被人盗链,时间久了导致服务器大量资源浪费,由于服务器使用nginx做为web服务器。nginx的防盗链方法有很多,可以使用现成的防盗链模块nginx-accesskey-2.0.3,编译ningx时添加此模块即可。
由于服务其他业务需要,所以nginx编译了lua模块,所以就想通过lua来实现下载服务器的防盗链功能(通过lua的Nginx模块lua_nginx_module、这里不再详细介绍配置过程),这样就可以免去了accesskey模块。原理就是生成经过处理过的下载链接,然后下载服务器在处理这个下载链接,成功则下载,失败则阻止。下面就是详细的配置实例:
一、在下载页面生成链接的nginx配置
download.jb51.net的配置:
server { listen80; server_namedownload.jb51.net; indexindex.htmindex.html; root/data/www/download; ssion; location/ { set_by_lua$downkey' returnngx.md5("encryption"..ngx.var.remote_addr.."suffix") '; } }
注意:要开启ssi才能在html页面中获取nginx自定义变量downkey,这样才能生成经过处理的url,其中字符串encryption和suffix为自定义的,可随便改其他字符,目的是为了生成别人不容易猜解的串。
测试index.html代码:
二、下载服务器nginx配置:
server { listen80; server_namedown.jb51.net; indexindex.htmindex.html; root/data/www/down; limit_connone1; set$limit_rate1000k; location/ { set_by_lua$foo' ifstring.sub(ngx.var.uri,2,33)==ngx.md5("encryption"..ngx.var.remote_addr.."suffix")then return1 else return0 end '; if($foo=1) { rewrite"^/([0-9a-z]{32})(.*?)$"$2break; } if($foo=0) { rewrite^/http://download.jb51.net/404.htmredirect; } } }
这样把链接复制给另外一台机器后,就会打开提示错误页面。