服务器之家

服务器之家 > 正文

通过lua来配置实现Nginx服务器的防盗链功能

时间:2019-11-06 12:12     来源/作者:moon

下载服务器时常被人盗链,时间久了导致服务器大量资源浪费,由于服务器使用nginx做为web服务器。nginx的防盗链方法有很多,可以使用现成的防盗链模块nginx-accesskey-2.0.3,编译ningx时添加此模块即可。
由于服务其他业务需要,所以nginx编译了lua模块,所以就想通过lua来实现下载服务器的防盗链功能(通过lua的Nginx模块lua_nginx_module、这里不再详细介绍配置过程),这样就可以免去了accesskey模块。原理就是生成经过处理过的下载链接,然后下载服务器在处理这个下载链接,成功则下载,失败则阻止。下面就是详细的配置实例:
一、在下载页面生成链接的nginx配置
download.zzvips.com的配置:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server 
    listen    80; 
    server_name download.zzvips.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代码:
二、下载服务器nginx配置:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
server 
    listen    80; 
    server_name down.zzvips.com; 
    index index.htm index.html; 
    root /data/www/down; 
    limit_conn  one 1; 
    set $limit_rate 1000k; 
 
  location / 
    
        set_by_lua $foo ' 
            if string.sub(ngx.var.uri, 2, 33) == ngx.md5("encryption" .. ngx.var.remote_addr .. "suffix") then 
                return 1
            else
                return 0
            end 
        '; 
 
        if ($foo = 1) 
        
            rewrite "^/([0-9a-z]{32})(.*?)$"    $2 break; 
        
        if ($foo = 0) 
        
            rewrite ^/ http://download.zzvips.com/404.htm redirect; 
        
    
}

这样把链接复制给另外一台机器后,就会打开提示错误页面。

 

标签:

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
Nginx服务器究竟是怎么执行PHP项目
Nginx服务器究竟是怎么执行PHP项目 2019-05-24
配置IIS网站web服务器的安全策略配置解决方案
配置IIS网站web服务器的安全策略配置解决方案 2019-05-23
返回顶部