Nginx:防盗链(示意图+代码举例)

示意图:

Nginx:防盗链(示意图+代码举例)_第1张图片

防盗链

防盗链(Anti-leeching)是一种用于保护网站资源不被其他非授权网站盗用的技术手段。盗链是指其他网站在未经允许的情况下直接引用了目标网站的资源,比如图片、视频、音频等,从而消耗了目标网站的流量和带宽资源。防盗链技术旨在阻止这种非法盗用行为,保护网站的资源安全和带宽消耗。

浏览器可以通过发送 HTTP 请求时的 Referer 头字段来实现防盗链。Referer 是一种 HTTP 头字段,它包含了当前请求的来源页面的地址。在防盗链中,服务器可以检查 Referer 头字段,以确定请求资源的来源。当资源位于网站 A 上时,如果网站 B 直接链接到了网站 A 上的资源,当浏览器向网站 A 发送请求时,会在 HTTP 请求中包含 Referer 头字段,其值为网站 B 的地址。网站 A 可以通过检查这个 Referer 头字段来确定请求的来源,并据此判断是否允许访问资源。

Nginx的防盗链

在Nginx中,可以通过配置防盗链规则来限制只有来自特定网站的请求(referers为指定网址)才能访问资源,其他来源的请求将被拒绝。

格式:

valid_referers [指令参数];
  • 如果请求中的引用页面不在valid_referers列表中,$invalid_referer将为真。
  • 指令参数:
    • none:表示不允许任何 Referer,允许缺失 referer 头部的请求访问,有referer就赋invalid_referer值为真。
    • blocked:检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。
      • 当请求通过防火墙或代理服务器时,有些安全设置会剔除或修改 Referer 头域,以保护用户的隐私或增强安全性。因此,当使用 blocked 时,Nginx 将考虑到这种情况,并允许这些请求通过防盗链验证。
    • server_names:表示使用配置中的 server_name 作为 Referer 的白名单。
      • 如*.example.com: 允许来自 example.com 域名的请求。
      • example.com www.example.com: 允许来自 example.com 和 www.example.com 域名的请求。
    • string:表示其他指定的 Referer。
if ($invalid_referer) {
     return 403;
}

出现盗用则返回403错误。 

(注意:Referer 头域容易被伪造或篡改,因此仅依赖 Referer 头域来验证请求的安全性可能并不可靠。最佳实践是结合其他安全措施,如使用身份验证或访问令牌等机制,以确保应用的安全性,更多内容请自行了解。)

举例

nginx.conf配置文件为:

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  150.158.51.21;

        location / {
            root   html;
            index  index.html index.htm;
        }

        location /img {
            valid_referers 150.158.51.21;
            if ($invalid_referer){
                return 403;
            }
            alias img;
            index index.html index.htm;
        }

        error_page 403 /StealChain.html;
        location = /StealChain.html{
            root html;
        }
    }
}

功能:直接访问ip,会返回index.html;index.html会再次访问静态资源图片(携带referers),然后将在主页显示图片;直接访问ip/img/图片名,会进入/img的location块,进而判断referers是否为150.158.51.21,如果为空,则报错403,返回错误显示页面StealChain.html。

目录结构:

Nginx:防盗链(示意图+代码举例)_第2张图片

效果:

  1. 访问ip:Nginx:防盗链(示意图+代码举例)_第3张图片
  2. 直接访问图片URL:Nginx:防盗链(示意图+代码举例)_第4张图片

你可能感兴趣的:(nginx学习,nginx,运维)