ngx_http_referer_module 盗链模块

ngx_http_referer_module模块:用来阻止Referer首部无有效值的请求访问,可防止盗链
valid_referers none|blocked|server_names|string ...; 定义referer首部的合法可用值,不能匹配的将是非法值
    none:          请求报文首部没有referer首部,比如用户直接在浏览器输入域名访问web网站,就没有referer信息。
    blocked:      请求报文有referer首部,但无有效值,比如为空。
    server_names:        referer首部中包含本主机名.从Nginx 0.5.33版本开始,server_names中可以使用通配符"*"号。
    arbitrary_string:    任意字符串,但可使用*作通配符
    regular expression:  被指定的正则表达式模式匹配到的字符串,要使用~开头,例如: ~.*\.magedu\.com
HTTP Referer是Header的一部分,当浏览器向Web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理,
例如防止未经允许的网站盗链图片、文件等。因此HTTP Referer头信息是可以通过程序来伪装生成的,所以通过Referer信息防盗链并非100%可靠,但是,它能够限制大部分的盗链情况。

防止盗链生产案例:
valid_referers none block server_names   *.magedu.com  ~\.google\.  ~\.baidu\.;
  if ($invalid_referer) {
    return 403 "Forbidden Access";}


location ~* \.(gif|jpg|png|swf|flv|css|js|flv|swf|jpeg)$ { 
  valid_referers none blocked server_names  *.zjol.com.cn *.zzhz.com.cn *.zjtdw.com;    定义合规的引用
  if ($invalid_referer) {    
return 403; } #拒绝不合规的引用
server {
        listen       80;
        server_name  refererserver.zjol.com.cn;
        charset utf-8;

        location /refererserver{
                root   /data/nginx/html/;
                access_log /usr/local/nginx/logs/refererserver.log main;
         
valid_referers none block server_names *.magedu.com ~\.google\. ~\.baidu\.;
          if ($invalid_referer) {
            return 403 "Forbidden Access";
          }
    }



server {
        listen       80;
        server_name  referer.zjol.com.cn;
        charset utf-8;

        location /referer {
                root   /data/nginx/html/;
                index  index.html index.htm;

        access_log /usr/local/nginx/logs/referer.log main;
        }
}


盗用refererserver.zjol.com.cn页面

[root@localhost7B ]#cat referer/index.html
<!DOCTYPE html>
<html lang="zjol-zzhz">
<head>
  <meta charset="UTF-8">
  <title>盗链页面</title>
</head>
<body>
  <a href="http://www.zzhz.com.cn">测试盗链</a>
  <img src="http://refererserver.zjol.com.cn/refererserver/sky.jpg">
</body>
</html>

 

 

访问测试http://referer.zjol.com.cn/referer/sky.jpg  可以盗链 请求的图片大小

[root@localhost7B conf.d]# tail -f /usr/local/nginx/logs/referer.log
192.168.80.1 - - [18/Jul/2022:16:09:35 +0800] "GET /referer/index.html HTTP/1.1" 200 272 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0" "-"


[root@localhost7B html]# tail -f /usr/local/nginx/logs/refererserver.log

 192.168.80.1 - - [18/Jul/2022:16:09:35 +0800] "GET /refererserver/sky.jpg HTTP/1.1" 200 2964 "http://referer.zjol.com.cn/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0" "-"


设置盗链之后访问测试http://referer.zjol.com.cn/referer/sky.jpg 说明 访问记录还是有的。

[root@localhost7B conf.d]# tail -f /usr/local/nginx/logs/referer.log

192.168.80.1 - - [18/Jul/2022:16:39:06 +0800] "GET /referer/index.html HTTP/1.1" 200 272 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36" "-"

[root@localhost7B html]# tail -f /usr/local/nginx/logs/refererserver.log

192.168.80.1 - - [18/Jul/2022:16:35:40 +0800] "GET /refererserver/sky.jpg HTTP/1.1" 403 16 "http://referer.zjol.com.cn/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0" "-"





posted @ 2022-07-18 16:49  yuanbangchen  阅读(198)  评论(0编辑  收藏  举报