Nginx防盗链的实现
作者:温新
时间:2021-03-02
要实现防盗链就必须知道什么是盗链?那么什么是盗链呢?
什么是盗链
盗链是指把其他资源的连接服务写在自己的服务上为用户提供的服务。
举个例子:A、B两个图片网站,A网站资源齐全,B网站本应从自己的服务器中提供图片服务,但是B网站为了自己的利益,把A网站的图片URL放在自己的页面进行提供服务。这样就出现了B网站的图片URlQ全是是A网站的URL,这也就是盗链。
常见的盗链有:图片盗链、音频盗链、视频盗链、文件盗链。
Nginx防盗链原理与指令
防盗链原理:防盗链是根据HTTP协议中的请求头部的Referer头域和采用URL的格式表示访问当前网页或文件的源地址。通过该头域可以检测访问目标资源的源地址。
Nginx中根据valid_referers
来获取头域的值,并根据该值的情况给全局变量$invalid_referer
赋值。
valid_referers指令
语法:valid_referers none | blocked | server_names | string ...;
参数:
<span style="box-sizing: border-box;padding-right: 0.1px">- none,检测Referer头域不存在的情况;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">- blocked,检测Referer头域的值被防火墙或者代理服务器删除或伪装的情况。该情况下,头域的值不以http://或https://开头;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">- server_names,设置一个或多个URL,检测Referer头域的值是否含这些URL中的某个。</span>
实现防盗链有两种方式:一是根据请求的资源类型;二是根据请求目录。
Nginx实现防盗链
步骤一:准备两台服务器
服务A:192.168.133.128:8080 (被盗链的服务器)
服务B:127.0.0.1 (盗链服务器)
安装过程自行安装。
步骤二:配置A服务器(被盗链的服务器)
<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)"># 主服务器,也就是被盗链的服务器</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 85, 170)">server</span> {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(255, 85, 0)">root</span> /www/demo01;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(255, 85, 0)">listen</span> 192.168.133.128:8080;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> </span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">location</span> <span style="box-sizing: border-box;color: rgb(17, 102, 68)">~</span>.*<span style="box-sizing: border-box;color: rgb(17, 102, 68)">\</span>.<span style="box-sizing: border-box;color: rgb(17, 102, 68)">(jpg|png|gif|jpeg)$ </span>{</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">valid_referers</span> <span style="box-sizing: border-box;color: rgb(17, 102, 68)">none 192</span>.168.133.128:8080;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">if</span> <span style="box-sizing: border-box;color: rgb(17, 102, 68)">($invalid_referer)</span> {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">return</span> 403;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> } </span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> } </span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">}</span>
步骤三:配置B服务器(盗链服务器)
<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)"># 安装nginx之后直接默认就行</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 85, 170)">server</span> {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(255, 85, 0)">listen</span> 80;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(255, 85, 0)">server_name</span> localhost;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">location</span> / {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(255, 85, 0)">root</span> html;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">index</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">index</span>.<span style="box-sizing: border-box;color: rgb(17, 102, 68)">html index</span>.htm;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> }</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">}</span>
步骤四:B服务器开始盗链
<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)"><!-- /usr/local/ngin/html/test.html --></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span class="cm-tag cm-bracket" style="box-sizing: border-box;color: rgb(17, 119, 0)"><</span><span style="box-sizing: border-box;color: rgb(17, 119, 0)">img</span> <span style="box-sizing: border-box;color: rgb(0, 0, 204)">src</span>=<span style="box-sizing: border-box;color: rgb(170, 17, 17)">"http://192.168.133.128:8080/git.jpg"</span><span class="cm-tag cm-bracket" style="box-sizing: border-box;color: rgb(17, 119, 0)">></span></span>
注意了,test.html是在B服务器中,它要盗取A服务器的资源。
步骤五:测试
A服务器:访问http://192.168.133.128:8080/git.jpg
可以正常看到图片;
B服务器:访问127.0.0.1/test.html
无法看到图片,返回403。
我是温新
每天进步一点点,就一点点
请登录后再评论