Nginx: ngx_http_referer_module ngx_http_secure_link_module

Module ngx_http_referer_module (nginx.org)

 

 

 

 

 

 

 

 

 

Nginx中有一个指令 valid_referers. 该指令可以用来获取 Referer 头域中的值,并且根据该值的情况给 Nginx全局变量 invalidreferer赋值。如果Referer头域中没有符合validreferers指令的值的话,invalidreferer赋值
如果Referer头域中没有符合validreferers指令的值的话,invalid_referer变量将会赋值为1. valid_referers 指令基本语法如下: valid_referers none
| blocked | server_names | string none: 检测Referer头域不存在的情况。 blocked: 检测Referer头域的值被防火墙或者代理服务器删除或伪装的情况。那么在这种情况下,该头域的值不以"http://""https://" 开头。 server_names: 设置一个或多个URL,检测Referer头域的值是否是URL中的某个。 1. 根据请求文件类型实现防盗链配置实列如下: server { listen 80; server_name www.rabble.com; location ~* ^.+\.(gif|jpg|jpeg|png|swf|flv|rar|zip)$ { valid_referers none blocked $server_name 192.168.8.11 www.rabble.io *.rabble.io ~\.rabble\.; if ($invalid_referer) { #return 403; rewrite ^/ http://www.xxx.com/images/forbidden.png; } } } 如上基本配置,当有网络连接对以 gif、jpg、png为后缀的图片资源时候、当有以swf、flv为后缀的媒体资源时、或以 rar、zip为后缀的压缩资源发起请求时,如果检测到Referer头域中没有符合 valid_referers指令的话,那么说明不是本站的资源请求。 location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ 该配置的含义是 设置防盗链的文件类型。 valid_referers none blocked www.xxx.com www.yyy.com *.baidu.com *.tabobao.com; 可以理解为白名单,允许文件链出的域名白名单,如果请求的资源文件不是以这些域名开头的话,就说明请求的资源文件不是该域下的请求,因此可以判断它是盗链。因此如果不是该域下的请求,就会使用 Rewrite进行重定向到 http://www.xxx.com/images/forbidden.png 这个图片,比如这张图片是一个x或其他的标识,然后其他的网站就访问不了你这个图片哦。 2. 根据请求目录实现防盗链的配置实列如下: server { listen 80; server_name www.rabble.com; location ^~ /images/ { valid_referers none blocked $server_name 192.168.8.11 www.rabble.io *.rabble.io ~\.rabble\.; if ($invalid_referer) { #return 403; #rewrite ^/ http://www.xxx.com/images/forbidden.png; rewrite ^/ $scheme://$server_name/images/forbidden.png; } location = /images/forbidden.png { } } }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

server {
    listen       80;
    listen       [::]:80;
    server_name  vend.intrinsic.io *.intrinsic.io;
    root         /usr/share/nginx/html;
    error_log /var/log/nginx/error.log debug;
    rewrite_log on;

    #date -d '10 minutes' +%s
    #echo -n '1652526929/index.html192.168.8.21 secret' | openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =
    #curl --include --compressed --ipv4 --data 'md5=YC7iw3o4Y8KM-wjX5K_FRQ&expires=1652526929' --get primary.intrinsic.io/index.html --header 'Host: rtyu' --cookie 'a=11;b=22'

    location / {
        secure_link $arg_md5,$arg_expires;
        secure_link_md5 "$secure_link_expires$uri$remote_addr secret";
        if ($secure_link = "") {
            return 403 '$uri';
        }
        if ($secure_link = "0") {
            return 410 '$uri $remote_addr';
        }
        return 201 '$secure_link:$secure_link_expires\n';
    }

    #echo -n 'index.htmlsecret' | openssl md5 -hex
    #curl --include --compressed --ipv4 --get primary.intrinsic.io/prefix/b26af76f5cc7418f36e132161968c37b/index.html --header 'Host: rtyu' --cookie 'a=11;b=22'

    location /prefix/ {
        secure_link_secret secret;
        if ($secure_link = "") {
            return 403;
        }
        rewrite ^ /secure/$secure_link;
    }
    location /secure/ {
        alias html/;
        internal;
    }
    error_page 404 /404.html;
    location = /404.html {
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }
}

 

posted @ 2022-05-14 19:29  ascertain  阅读(150)  评论(0编辑  收藏  举报