Linux-nginx-防盗链

nginx防盗链

防盗链基于客户端携带的referer实现,referer是记录打开一个页面之前记录是从哪个页面跳转过来的标 记信息,如果别人只链接了自己网站图片或某个单独的资源,而不是打开了网站的整个页面,这就是盗 链,referer就是之前的那个网站域名,正常的referer信息有以下几种:

none:#请求报文首部没有referer首部,比如用户直接在浏览器输入域名访问web网站,就没有referer信
息。
blocked:#请求报文有referer首部,但无有效值,比如为空。
server_names:#referer首部中包含本主机名及即nginx 监听的server_name。
arbitrary_string:#自定义指定字符串,但可使用*作通配符。示例: *.magedu.org www.magedu.*
regular expression:#被指定的正则表达式模式匹配到的字符串,要使用~开头,例如:
~.*\.magedu\.com

实现盗链

在一个web 站点盗链另一个站点的资源信息,比如:图片、视频等

#新建一个主机www.mageedu.org,盗取另一台主机www.magedu.org的图片
[root@centos8 conf.d]# pwd
/apps/nginx/conf/conf.d
[root@centos8 conf.d]# cat mageedu.org.conf
server {
 listen 80;
 server_name www.mageedu.org;
 location / {
   index index.html;
   root "/data/nginx/html/magedu";
   access_log /apps/nginx/logs/magedu.org_access.log main;
 }
}

 

#准备盗链web页面:
[root@centos8 conf.d]# mkdir /data/nginx/html/magedu
[root@centos8 conf.d]# cat /data/nginx/html/magedu/daolian.html
<html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<title>盗链</title>
</head>
<body>
<img src="http://www.magedu.org/images/logo.png" >
<h1 style="color:red">欢迎大家</h1>
<p><a href=http://www.magedu.org>马哥教育</a>欢迎你</p>
</body>
</html>
#重启Nginx并访问http://www.mageedu.org/daolian.html 测试
#验证两个域名的日志,是否会在被盗连的web站点的日志中出现以下盗链日志信息:
[root@centos8 ~]#tail /apps/nginx/logs/magedu.org_access.log
10.0.0.1 - - [11/Oct/2020:09:50:07 +0800] "GET /images/logo.png HTTP/1.1" 200
5934 "http://www.mageedu.org/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36
Edg/86.0.622.38" "-"

 

实现防盗链

基于访问安全考虑,nginx支持通过ngx_http_referer_module模块,检查访问请求的referer信息是否有 效实现防盗链功能

语法格式:

location   /images {
   root /data/nginx/html/pc;
   index index.html;
   valid_referers none blocked server_names
         *.example.com example.* www.example.org/galleries/
         ~\.google\.;
          
    if ($invalid_referer) {
     return 403;
   }

定义防盗链:

[root@centos8 ~]# vim /apps/nginx/conf/conf.d/pc.conf
server {
   index index.html;
   valid_referers none blocked server_names *.magedu.com *.magedu.org  
~\.google\. ~\.baidu\. ~\.bing\. ~\.so\. ~\.dogedoge\. ; #定义有效的
referer
    if ($invalid_referer) { #假如是使用其他的无效的referer访问
     return 403 "Forbidden Access"; #返回状态码403
   }
......
}
#重启Nginx并访问测试

 

posted @ 2022-06-04 17:34  goodbay说拜拜  阅读(81)  评论(0编辑  收藏  举报