目 录CONTENT

文章目录

Nginx设置防盗链

简中仙
2022-09-07 / 0 评论 / 0 点赞 / 42 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2023-10-07,若内容或图片失效,请留言反馈。 本文如有错误或者侵权的地方,欢迎您批评指正!

盗资源是黑产界以最小成本获取最高利益的一个常用手段。因此,对于任何一个大型网站而言,做好防盗措施,避免自身利益受损是至关重要的。Nginx 在代理这类静态资源(图片、视频、文章等)时,可以通过配置实现防盗连的功能。

1、使用Referer模块

location ~* .*\.(gif|jpg|ico|png|css|svg|js)$ {
	root /usr/local/nginx/static;
	#valid_referers none blocked www.gaoyufu.com *.gaoyufu.com *.baidu.com *.google.com;            # 有效的来源
  valid_referers www.gaoyufu.com *.gaoyufu.com *.baidu.com *.google.com;            # 有效的来源
	if ($invalid_referer) {                               # 无效的来源的话就给404
		rewrite ^/ http://www.youdomain.com/404.jpg;
		#return 404;
		#break;
	 }
	 access_log off;
}

valid_referers:此关键字定义了白名单,即本机自身访问允许,自行修改成您的域名!*.gaoyufu.com这个指的是子域名,域名与域名之间使用空格隔开;

rewrite ^/ http://xxxxxxx.jpg:这个图片是盗链返回的图片,也就是替换盗链网站所有盗链的图片。这个图片要放在没有设置防盗链的网站上,因为防盗链的作用,这个图片如果也放在防盗链网站上就会被当作防盗链显示不出来了,盗链者的网站所盗链图片会显示设定的图片。

invalid_referer:此为内置变量,通过判断上一行中的valid_referers值会返回0或者1,

  • none代表请求头中没有referer信息,这一般是直接在浏览器输入图片网址;
  • blocked代表被防火墙过滤标记过的请求。如果访问来源不在白名单内,则返回403错误

2、secure_link模块

该模块的功能是与实际HTTP应用程序(PHP或Java等动态应用程序)相结合,实现对用户的访问连接做校验和过期验证的功能。常用于访问及文件下载的防盗链的实现。

HTTP服务器代码(PHP)配置样例如下:

<?php 
$secret = 'nginxtest';                                         // 定义密钥 
$path   = "/download/test.zip";                                // 被保护的真实连接 
$expire = time()+10;                                          // 访问超时时间是10s 
$md5 = base64_encode(md5($secret . $path . $expire, true));  // 将访问密钥、访问路径、超时时 间加密 
$md5 = strtr($md5, '+/', '-_');                               // 特殊字符“+”和“/”的处理 
$md5 = str_replace('=', '', $md5);                            // 特殊字符“=”的处理 
$url = "http://".$_SERVER['HTTP_HOST']."$path?valid=$md5&time=$expire"; // 新的访问连接 
echo '<a href="'.$url.'" >test.zip</a>'; 

?>

Nginx配置样例如下:

server{ 
    listen 8083; 
    root /opt/nginx-web/phpweb; 
 
    location ~ \.php(.*)$ { 
        fastcgi_pass   127.0.0.1:9000; 
        fastcgi_index  index.php; 
 
        fastcgi_split_path_info       ^(.+\.php)(.*)$; 
        fastcgi_param PATH_INFO       $fastcgi_path_info; 
        include        fastcgi.conf; 
    }     
 
    location /download/ { 
        alias /opt/nginx-web/files/; 
        secure_link $arg_valid,$arg_time;       # 设置MD5及过期时间的参数为valid和time 
        secure_link_md5 nginxtest$uri$arg_time; # MD5计算格式 
        if ( $secure_link = "" ) { 

                return 403; 
        } 
        if ( $secure_link = "0" ) { 
                return 405; 
        } 
    } 
}

3、使用第三方模块

ngx_http_accesskey_module

下载模块

git clone https://github.com/darren2025/nginx-accesskey.git
./config --prefix=/usr/local/nginx --add-module=nginx-accesskey   
make 
make install

配置nginx

server {
	       listen 10022;
	       server_name localhost;
	       location ^~ /files/{
	         alias /opt/nginx-web/files/;
	         autoindex on;
	         autoindex_exact_size on;
	         autoindex_localtime on;
	         accesskey             on; #功能开启
             accesskey_hashmethod  md5; #加密方式
             accesskey_arg         sign; #参数名称
             accesskey_signature   "mypass$remote_addr"; #参数
	       }
	    }
0

评论区