下载服务器时常被人盗链,时间久了导致服务器大量资源浪费,由于服务器使用nginx做为web服务器。nginx的防盗链方法有很多,可以使用现成的防盗链模块nginx-accesskey-2.0.3,编译ningx时添加此模块即可。
由于服务其他业务需要,所以nginx编译了lua模块,所以就想通过lua来实现下载服务器的防盗链功能,这样就可以免去了accesskey模块。原理就是生成经过处理过的下载链接,然后下载服务器在处理这个下载链接,成功则下载,失败则阻止。下面就是详细的配置实例:(其中要编译nginx添加lua模块支持,可参考:http://www.92csz.com/27/706.html)
一、在下载页面生成链接的nginx配置
download.92csz.com的配置:
- server
- {
- listen 80;
- server_name download.92csz.com;
- index index.htm index.html;
- root /data/www/download;
- ssi on;
- location /
- {
- set_by_lua $downkey '
- return ngx.md5("encryption" .. ngx.var.remote_addr .. "suffix")
- ';
- }
- }
注意:要开启ssi才能在html页面中获取nginx自定义变量downkey,这样才能生成经过处理的url,其中字符串encryption和suffix为自定义的,可随便改其他字符,目的是为了生成别人不容易猜解的串。
测试index.html代码:
如非注明则为本站原创文章,欢迎转载。转载请注明转载自:moon's blog
谢谢分享。确实不错的博文。
呵呵 ,正好遇到这个实例,就随手记下了 🙂
在Linux下没有遇到过死的情况,在Windows下倒遇到过几次 😎
适合做前端,处理静态文件比较牛
想问下,为什么不做成query string的形式呢?这样rewrite还是可能暴露真实的下载地址。
暴露真实地址也不怕,根本就下载不了 🙂
打酱油
正好用到。。。
看看楼主怎样实现的~~
你好,请问这句
string.sub(ngx.var.uri, 2, 33) == ngx.md5("encryption" .. ngx.var.remote_addr .. "suffix")
会成立吗?
会的,这个要和生成加密串的前缀和后缀一样才可以 😛
顶楼主
路过,写的不错,顶!!!
非常感谢分享
请管理员审核一下,想看看index.html代码,谢谢
感谢大神分享