Nginx静态资源防盗链

什么是资源防盗链

资源防盗链是一种网络安全机制,用于防止未授权的网站或服务通过直接链接(即所谓的“盗链”)到存储在其他服务器上的资源(如图片、视频、音频、文档等),从而非法使用这些资源。这种机制的目的是保护资源所有者的版权和服务器资源,避免因未授权访问导致的带宽和服务器压力增加。

例如下面的三张图片
第一张是某网站图片,没有防盗链通过img标签可直接展示,第二章是某度的图片,通过img标签不显示。第三章是本地服务器图片
在这里插入图片描述

加了防盗链的会看不到

上面图片的html文件代码

<html>
  <head>
        <meta charset="utf-8">
        <title>跨域问题演示</title>
        <script src="jquery.js"></script>
        <script>
            $(function(){
                $("#btn").click(function(){
                        $.get('http://192.168.101.18:80/get_user',function(data){
                                alert(JSON.stringify(data));
                        });
                });
            });
        </script>
  </head>
  <body>
        <input type="button" value="获取数据" id="btn"/>
        <img src="http://xxx.com/ab/2231/7/17837/3334/60739b32154gfrrew721476a/8742222e63cc55f.jpg"/></br> #第一张图片
        <img src="https://xxx.xxx.xxx.com/pic/cb8065380cd7912319207aecac34598as4t762"/></br> #加了防盗链的图片
        <img src="http://192.168.101.23/images/AK.jpg"/></br> #本地的图片
  </body>
</html>
~

Nginx防盗链的实现原理:
HTTP Referer头部:浏览器在请求资源时,通常会在HTTP请求中包含一个Referer头部,指明了该请求是从哪个页面发起的。服务器可以通过检查这个Referer头部来确定请求的来源是否合法。

例如百度的Refer信息
在这里插入图片描述
后台服务器可以根据获取到的这个Referer信息来判断是否为自己信任的网站地址,如果是则放行继续访问,如果不是则可以返回403(服务端拒绝访问)的状态信息。

Nginx防盗链的具体实现:

valid_referers

valid_referers:nginx会通就过查看referer自动和valid_referers后面的内容进行匹配,如果匹配到了就将invalid_referer变量置0,如果没有匹配到,则将invalid_referer变量置为1,匹配的过程中不区分大小写。

指令valid_referers
默认值无默认值
用途验证HTTP请求中的Referer头部,确保请求来自信任的来源
配置示例valid_referers none blocked server_names;

none: 不验证 Referer 头部,允许所有请求通过
blocked:在Header中的Referer不为空,但是该值被防火墙或代理进行伪装过,如不带"http://" 、"https://"等协议头的资源允许访问。
server_names:指定具体的域名或者IP
string: 可以支持正则表达式和*的字符串。如果是正则表达式,需要以~开头表示,例如


```powershell
location ~*\.(png|jpg|gif){ #"~"表示正则表达式  "*"表示任意字符 “\” 转义 "." ,(png|jpg|gif) 表示以.png 或者 .jpg 或者 .gif结尾的都将被匹配
       valid_referers none blocked www.baidu.com 192.168.101.23 *.example.com example.*  www.example.org  ~\.google\.;
       if ($invalid_referer){
            return 403;
       }
       root /usr/local/nginx/html;

}

测试在192.168.101.18服务器上添加一张图片,在192.168.101.23 的cross.html中使用标签引用它。

在192.168.101.23 的cross.html

<img src="http://192.168.101.18/images/AK.jpg"/></br> #本地的图片.

未添加防盗链之前是可以访问到的
在这里插入图片描述

在192.168.101.18的nginx添加如下代码:

location /images {
              root html; #该目录下的所有图片都会防盗链 匹配路径:root路径+location路径: html/images
              valid_referers none blocked 192.168.101.18 www.baidu.com;
              if ($invalid_referer){
                     return 403;
             }
        }

测试:加上后23的服务器不能访问192.168.101.18服务器的图片了.
在这里插入图片描述

valid_referers配置解释
valid_referers none blocked 192.168.101.18 www.baidu.com;

none: 允许那些没有来源信息的请求。比如,用户直接在浏览器地址栏输入网址后访问你的资源。

blocked: 允许那些来源信息被隐藏或屏蔽的请求。有些浏览器或插件会自动隐藏来源信息,这个选项就是允许这些请求通过。通俗一点的解释是:如果你把 blocked 加到配置中,就是告诉Nginx:“如果请求的来源信息被挡住或隐藏了,也没关系,允许它通过。”

192.168.101.18: 允许那些来源是这个IP地址的请求。通常是指局域网内某台电脑或服务器发出的请求。

www.baidu.com: 允许那些来源是百度网站的请求。比如,从百度网站点击链接访问你的资源。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nginx可以通过配置来解决静态资源跨域问题。在nginx的配置文件中,可以使用add_header指令来设置Access-Control-Allow-Origin头部,从而允许跨域访问静态资源。例如,可以在静态资源站点的配置中添加以下代码: ``` server { listen 80; add_header 'Access-Control-Allow-Origin' '*'; server_name dev.aaa.com; root /yuxuntoo/static/uploadfile; index index.html; } ``` 通过这样的配置,就可以解决静态资源站点的跨域问题。这里的`add_header 'Access-Control-Allow-Origin' '*'`表示允许任何来源的请求访问静态资源。当然,你也可以根据需要设置具体的来源。 需要注意的是,这只是一种解决静态资源跨域问题的方法,还有其他的解决方案,比如使用CDN来处理跨域问题。具体的选择可以根据实际情况和需求来决定。\[1\]\[2\] #### 引用[.reference_title] - *1* [Nginx解决静态资源跨域问题](https://blog.csdn.net/ybb_ymm/article/details/128691476)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [04-nginx的跨域、静态资源防盗链、rewrite](https://blog.csdn.net/qq_43788522/article/details/125822128)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值