nginx作防盗链设置

盗链是一种损害原有网站合法权益,给原网站所在服务器造成额外负担的非法行为。

盗链的实现原理:

客户端向服务器请求资源时,为了减少网络带宽,提高响应时间,服务器一般不会一次将所有资源完整地传回给客户端。比如在请求一个网页时,首先会传回该网页的文本内容。当客户端浏览器在解析文本的过程中发现有图片存在时,会再次向服务器发起对该图片资源的请求,服务器将请求图片资源再发送给客户端。在这个过程中,如果该服务器上只包含了网页的文本内容,并没有存储相关图片资源,而是将图片资源链接到其他的服务器,这就是形成了盗链的行为。这种情况下,客户端请求的图片资源实际上是来自于其他服务器的。

要实现防盗链,需要了解http的referer头域和采用URL的格式表示访问当前网页或者文件的原地址。通过referer头域,我们可以检测到访问目标资源的源地址。这样如果我们检测到的referer头域中的值并不是自己站点内的URL,就采取阻止措施,实现防盗链。

需要说明的是referer头域的值,可以被修改,因此该方法并不能完全阻止所有的盗链行为。

通过一个实例来说明referer头域和防盗链的设置。

先看一个html代码,这是nginx自带的默认的页面,我们在页面中加入了一个img标签,插入一张图片,插入的图片的URL地址,是来自另一个服务器!

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
<div>

<!-- 插入的图片  -->
<h4>我的测试图片</h4>
<img src="http://www.test.com/one.jpg">

</div>
</body>
</html>

然后我们在浏览器中访问这个web页面:

在www.test.com服务器上查看访问日志,如下:

192.168.1.103 - - [04/Nov/2018:18:06:44 +0800] "GET /one.jpg HTTP/1.1" 304 0 "http://www.abc.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:63.0) Gecko/20100101 Firefox/63.0"
192.168.1.103 - - [04/Nov/2018:18:06:45 +0800] "GET /one.jpg HTTP/1.1" 304 0 "http://www.abc.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:63.0) Gecko/20100101 Firefox/63.0"
192.168.1.103 - - [04/Nov/2018:18:06:46 +0800] "GET /one.jpg HTTP/1.1" 304 0 "http://www.abc.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:63.0) Gecko/20100101 Firefox/63.0"
192.168.1.103 - - [04/Nov/2018:18:06:46 +0800] "GET /one.jpg HTTP/1.1" 304 0 "http://www.abc.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:63.0) Gecko/20100101 Firefox/63.0"

在如上的日志中标记的就是referer头域,该头域指明了此次访问来自哪里?说明这些访问日志来自www.test.com这个URL。

知道了上面的知识,再来说防盗链,当www.abcc.om再来www.test.com这个服务器上拉取图片时,test服务器拒绝abc的访问,怎么拒绝呢?就是根据访问的referer头域,确定的!

在www.test.com上做如下设置:

        location ~* ^.*\.(gif|jpg|png)$
        {
            valid_referers none  blocked  www.test.com;
            if ($invalid_referer)
            {
                return 403;
            }
        }

#如上在test服务器的配置文件中加上如上配置,上面是针对gif,jpg,png格式做的防盗链。#valid_referers: 这个相当于白名单,出现在valid_referers中的值,都是允许访问的;如果当前访问的referer不符合valid_referers定义的值,则给invalid_referer赋值为1.如果当前访问的referer的值符合valid_referers定义的值,则给invalid_referer定义为0.

#valid_referers的取值可以有三种形式:
  • none表示检查referer头域不存在的情况。
  • blocked,检查referer头域的值被防火墙或者代理服务器删除或伪装的情况。这种情况下头域的值不是以“http”或者“https”开头的。
  • server_namse: 设置一个或多个URL,检查referer头域的值是否是这些URL中的某一个。nginx0.5.33之后支持使用通配符“*”;

按照以上的设置判断一下www.abc.com页面的访问,因为www.abc.com不在valid_referers设置的可访问头域中,因此给invalid_referer赋值为1,则拉取图片时返回403错误,也就是访问不到图片资源,

访问结果如下:

原文地址:https://www.cnblogs.com/wxzhe/p/10159376.html

时间: 2024-10-13 14:32:28

nginx作防盗链设置的相关文章

完美的nginx图片防盗链设置详解

一般,我们做好防盗链之后其他网站盗链的本站图片就会全部失效无法显示,但是您如果通过浏览器直接输入图片地址,仍然会显示图片,仍然可以右键图片另存为下载文件!依然可以下载?这样就不是彻底的防盗链了! 1 [[email protected] vhosts]# cat default.conf 2 server { 3 listen 80 default_server; 4 server_name 192.168.1.24 web01.espressos.cn; 5 root /app/www; 6

Nginx防盗链配置实例——从盗链模拟到防盗链设置流程细解

Nginx防盗链设置 ? 对于图片来说,A网站,如果想使用B网站的图片,可以直接写上B网站图片的链接地址,或者将B网站的图片通过右键另存为的方式下载到本地,然后在页面上使用.如果B网站不想A网站这么干了,那么B网站可以采取防盗链的措施来干这个工作,结果就是,A网站想请求所需要的资源,通过url的方式,获取的可能不是原来的图片了,出现404或者别的图片替代了.如果通过浏览器直接打开图片url,那么仍然有可能显示404,这就是防盗链. ? 下面我们先进行盗链的操作过程:就是如何做盗链网站--盗取别人

nginx防盗链设置

#防盗链设置 location ~* \.(jpe?g|png|gif|php|html|htm|zip|apk|plist|ipa)$ { # referer_hash_bucket_size 64; # referer_hash_max_size 2048; valid_referers none blocked apicloud.com *.apicloud.com ; if ($invalid_referer) { return   403; } proxy_pass http://WE

NGINX 如何防盗链

一.安装Nginx:1.解决依赖关系 # yum groupinstall "Development Tools" "Server Platform Deveopment" # yum install openssl-devel pcre-devel 2.安装首先添加用户nginx,实现以之运行nginx服务进程: # groupadd -r nginx # useradd -r -g nginx nginx 接着开始编译和安装: # ./configure --p

什么是防盗链设置中的空Referer

设置防盗链时候指明和不指明空Referer的区别及实现后的效果? 什么是Referer? 这里的 Referer 指的是HTTP头部的一个字段,也称为HTTP来源地址(HTTP Referer),用来表示从哪儿链接到目前的网页,采用的格式是URL.换句话说,借着 HTTP Referer 头部网页可以检查访客从哪里而来,这也常被用来对付伪造的跨网站请求. Referer的正确英语拼法是referrer.由于早期HTTP规范的拼写错误,为了保持向后兼容就将错就错了.其它网络技术的规范企图修正此问题

Nginx的防盗链、Nginx的访问控制、Nginx解析php的配置、Nginx代理

Nginx的防盗链 Nginx的访问控制 禁止上传图片目录里php解析 Nginx解析php的配置 Nginx代理 原文地址:http://blog.51cto.com/13515599/2087315

Nginx系列-5.配置Nginx的防盗链

Nginx系列-5.配置Nginx的防盗链 目录 - Nginx系列 Nginx系列-1.Linux下安装Nginx Nginx系列-2.配置LNMP(Linux.Nginx.MySQL.PHP)架构 Nginx系列-3.配置Nginx虚拟主机 Nginx系列-4.Nginx日志配置及日志切割 Nginx系列-5.配置Nginx的防盗链 Nginx系列-6.配置Nginx的HTTPS Nginx系列-7.配置Nginx使用uwsgi支持web.py框架 Nginx系列-8.配置Nginx+Apa

nginx图片及目录防盗链设置

一.常见防盗链解决方案的基本原理 1).根据HTTP referer,使用URL格式表示是哪里的链接用了当前网页的资源,通过referer可以检测访问的来源网页,如果是资源文件,可以跟踪到显示它的网页地址,一旦检测出来源不是本站,马上进行阻止或返回指定的页面.Http referer是header的一部分,当浏览器向Web服务器发送请求时,一般会带上referer,告诉服务器我是从哪个页面链接过来的,服务器借此获得一些信息用于处理.Apache.Nginx.liGhttpd三者都支持根据Http

Nginx下载防盗链(迅雷等下载软件)

什么是下载盗链   假设我们是一个B站,有些视频资源是可以提供给用户下载的.这时迅雷等其他下载软件,也提供下载该视频的服务, 但是迅雷很不厚道的,将我们的下载资源提供给他的用户,下载.占用我们的带宽来服务他的用户,这是绝对不可以忍了的. 使用来源判断根本不靠谱,只能防止一些小白站点的盗链,迅雷之类的下载工具完全无效,如果你是 nginx 的话,使用 secure link 完美解决这个问题,远离迅雷. 本文仅用于下载服务器,不适用于图片防盗链. 原理 用户访问 down.php down.php