你们在访问网站的时候,常常会看到图片展现不出来的时候,以下图php
你们有没有想过这是为何嘛?其实这是一种简单的防盗链的处理,那么盗链是什么呢?为何须要防呢?我们今天来一块儿揭开它神秘的面纱。nginx
盗链是指在本身的页面上展现一些并不在本身服务器上的一些内容, 获取别人的资源地址,绕过别人的资源展现页面,直接在本身的页面上向最终用户提供此内容。 通常被盗链的都是图片、 音乐、视频、软件等资源。经过盗链的手段能够减轻本身服务器的负担浏览器
好比我直接在本身的网站上服务器

这样就能够直接展现百度的图片,可是其实是没法展现的(以下图),之因此没法展现是由于百度的图片作过防盗链处理网站
经过Refer或者签名,网站能够检测目标网页访问的来源网页,若是是资源文件,则能够追踪到显示他的网页地址 一旦检测到来源不是本站,即进行阻止或者返回指定的页面加密
Nginx模块,
ngx_http_referer_module用于阻挡来源非法域名的请求 nginx指令valid_refers,全局变量$invalid_refer
对资源的防盗链nginx配置为spa
location ~.*\.(gif|jpg|png|flv|swf|rar|zip)$ { valid_referers none blocked test.com *.test.com; //加none的目的是确保浏览器能够直接访问资源 if($invalid_referer) { #return 403; // 直接返回403 rewrite ^/ http://www.test.com/403.jpg;//返回指定提示图片 } }
对目录的防盗链nginx配置为code
location /images/ { valid_referers none blocked test.com *.test.com; if($invalid_referer) { #return 403; rewrite ^/ http://www.test.com/403.jpg; }
可是传统的防盗链也会存在一些问题,由于refer是能够伪造的, 因此可使用加密签名的方式来解决这个问题。 什么是加密签名?就是当咱们请求一个图片的时候,我要给他带一些签名过去,而后返回图片的时候咱们判断下签名是否正确,至关于对一个暗号。视频
可使用第三方模块HttpAccessKeyModule来解决防盗链的问题,咱们须要去安装。图片
安装好有这样一个指令:
accesskey on|off 模块开关
accesskey_hashmethod md5 | sha-1 签名加密方式
accesskey_arg GET参数名称
accesskey_signature 加密规则
location ~.*\.(gif|jpg|png|flv|swf|rar|zip)$ { accesskey on; accesskey_hashmethod md5; accesskey_arg sign; accesskey_signature "mypass$remote_addr"; }
意思是mypass加客户端ip经过md5加密 图片文件代码:
<?php $sign = md5('mypass' . $_SERVER['REMOTE_ADDR']); echo ''; ?>
以上就是防盗链的两种形式,欢迎伙伴们进行讨论留言。