Skip to content

防盗链原理

index.html 中引入的文件,请求时请求头中会有 Referer: http://192.168.44.101/ 字段 表明来源。

如果其它站点中 proxy_pass 指向了我们的资源 或 .html 中内联了我们的资源,可以通过 Referer 来防止非法请求。

nginx
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  www.rainx.top;

        location / {
            proxy_pass http://192.168.44.102;
        }

        location ~*/(js|css|img) {
            # 防盗链
            # 合法的 referer
            valid_referers 192.168.44.101 www.rainx.top;
            if ($invalid_referer) {
                # 如果是无效的 referer
                return 403;
            }

            root html;
            index  index.html index.htm;
        }

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

上述配置只要访问时的 Referer 不是 192.168.44.101,就无法访问到该资源。

valid_referers none | blocked | server_names | strings ....;

  • none

    valid_referers none 192.168.44.101 www.rainx.top;

    Referer 不存在的情况可以访问,如果存在必须是合法的才能访问。

  • blocked

    检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。这种情况该头域的值不以“http://” 或 “https://” 开头。

  • server_names

    设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某一个。