Nginx-防盗链

目录

一、什么是盗链

如何区分哪些是不正常的用户?

Referer理解 

二、Nginx配置防盗链

 三、使用 curl 测试防盗链

四、企业实战

1.设置返回错误页面

2.整合 rewrite 返回报错图片


一、什么是盗链

        在实际生产过程中,我们线上的图片等静态资源,经常会被其他网站盗用,他们发大财的同时,成本确实我们在买单,下面来说下,如何杜绝这种行为。
        应该说只要是静态资源都是可以防盗链的,只需要在Server字段加上几行代码即可。众所周知网站出名了后,会有各种刁民来找茬的,最常见的就是爬你网站的东西。
    关于防盗链这里不得不提一下网页的加载顺序是先加载HTML相关的内容,然后解析HTML的内容,那些需要加载图片,那些需要加载文件,是逐步加载的,所以可以在加载静态资源的时候做防盗链的操作,例如:在加载图片的时候直接跳转去其他链接,或者直接返回404,403等错误代码,拒绝它的请求。

如何区分哪些是不正常的用户?

        HTTP Referer是Header的一部分,当浏览器向Web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理,例如防止未经允许的网站盗链图片、文件等。因此HTTP Referer头信息是可以通过程序来伪装生成的,所以通过Referer信息防盗链并非100%可靠,但是,它能够限制大部分的盗链情况.
        比如在www.google.com 里有一个 www.baidu.com 链接,那么点击这个www.baidu.com ,它的header 信息里就有:Referer=http://www.google.com

Referer理解 

        HTTP 协议中有一个用来表示“页面或资源”来源的“请求头”,这个请求头叫做 Referer --> Referer是表示请求是从哪个网址发出的
        防盗链功能基于HTTP协议支持的 Referer 机制,通过Referer跟踪来源,对来源进行识别和判断

二、Nginx配置防盗链

为了模拟盗链,在这里让101为网站服务站点,102为网关服务器,103访问101进行盗链。

修改 102 Nginx 配置文件:

此时在浏览器输入102ip,可以正常访问101站点。

如果不想被盗链,则对101站点服务修改Nginx配置文件,防盗链的配置可以在任意的 location 模块下设置,不能在 server 下,你不想让别人盗链哪个资源就在那个资源的 location 模块下设置防盗链:

测试效果,用102ip去访问,css等静态资源返回403,获取不到:

 

1.# 格式:
valid_referers none | blocked | server_names | strings ....;

--none:允许没有http_refer的请求访问资源,检测 Referer 头域不存在的情况,则可以访问。

--blocked:检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。这种情况该头域的值不以
“http://” 或 “https://” 开头。允许不是http://开头的,不带协议的请求访问资源。

--server_names :只允许指定ip/域名来的请求访问资源(白名单)。可设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某一个。在生产环境中尽量使用域名,不使用ip。

2.# 举例

valid_referers 192.168.44.101;
if ($invalid_referer) {
return 403;
}

 三、使用 curl 测试防盗链

1.# 安装 curl 命令
yum -y install curl

2.# 测试,在 103 机器中访问 101
curl -I http://192.168.44.101/img/logo.png

-I:不带 Referer ,只是给我们返回响应的一些头信息。

curl -e "http://baidu.com" -I http://192.168.44.101/img/logo.png

-e:"http://baidu.com" 为 Referer,返回响应的一些头信息

四、企业实战

1.设置返回错误页面

在 101 Nginx 中 创建一个 401文件:

vim /usr/local/nginx/html/401.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Error</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>An error occurred.</h1>
<p>非法请求</p>
<p><em>Faithfully yours, nginx.</em></p>
</body>
</html>

 修改 101 配置文件,在下面添加一个 error_page 模块:

测试效果,在浏览器输入 102ip 访问站点的图片,返回下面信息:

2.整合 rewrite 返回报错图片

在 101 站点服务器中 创建 img 目录 /usr/local/nginx/html/img ,往里面 添加一张图片 x.png,修改配置文件:

在浏览器输入 102ip 访问到101 网址页面,图片位置上显示 x.png :

 

 

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stars.Sky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值