一,为什么要做防盗链?

1,什么是盗链?

比如某人有一个A网站,

他不愿自己存储图片,(因为磁盘和带宽都有成本)

就在自己A网站的页面上直接插入B网站的图片,

从而为自己吸引流量,这就是盗链

2,为什么需要防盗链?

盗链静态文件会浪费网站的带宽及服务器的计算能力

这些都是网站运行的成本,

而且会影响网站合法用户的正常访问体验

所以我们要禁止盗链网站的图片和视频等静态文件

3,防盗链的原理:

根据请求头中referer属性得到网页来源,从而实现访问控制。

禁止非法使用本站的图片。

说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

对应的源码可以访问这里获取: https://github.com/liuhongdi/

说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,防盗链的例子

1,盗链的效果

假设盗链的网站是:www.lhdtest.com,被盗链的图片来自file.laoliu.net

它的index.html页面内容:

<html>
<head>
<title>
invalid images
</title>
</head>
<body>
welcome to www.lhdtest.com<br/>
<img src="http://file.laoliu.net/image/mid/1/348_8d72a999aa1d5800.gif" style="width:260px;" />
</body>
</html>

效果图:

2,防盗链的配置

我们在file.laoliu.net的虚拟主机上添加配置:

    location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {
valid_referers none blocked *.laoliu.net;
if ($invalid_referer){
return 403;
}
expires 30d;
}

各项指令的说明:

valid_referers: 用来定义合法访问的一个白名单

none:            通过浏览器直接打开图片的url,这种情况没有referer,

通常我们允许这种访问

blocked:        referer不为空,但它的内容被防火墙或者代理服务器删除掉了

这种访问也可以允许

*.laoliu.net:   这个是被允许的域名,可以使用通配符

$invalid_referer:    是一个变量,用来判断valid_referers的结果是否非法

return 403:          返回403,403是HTTP 403 Forbidden的状态码,表示禁止访问

重启nginx生效后我们查看效果

说明:*.laoliu.net 这个域下面的页面仍然可以正常访问这些图片,

在浏览器地址栏直接输入地址也可以访问

3,遇到盗链时也可以跳转到一个提示当前被盗链的图片

例:

    location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {
valid_referers none blocked *.laoliu.net;
if ($invalid_referer){
rewrite ^/ http://img4.sycdn.imooc.com/5eaa360d00017ef904930247.jpg;
}
expires 30d;
}

查看效果:

三,仅判断referer并不可靠

因为referer是可以伪造的,所以这里的防盗链还不是百分百的安全,

更严格的需求可以用nginx的第三方模块http_accesskey_module模块或lua脚本实现

四,查看nginx的版本

[root@centos8 conf.d]# /usr/local/soft/nginx-1.18.0/sbin/nginx -v
nginx version: nginx/1.18.0

nginx安全:配置网站图片防盗链的更多相关文章

  1. Nginx修改配置实现图片防盗链

    一般情况下,防盗链是针对软件下载和图片的,由于一般的站点不提供资源下载,所以本文主要是针对图片的防盗链 1.如果对全站图片做防盗链,至少需要一个另外的域名存放指向图片.因为如果对全站图片做了防盗链,包 ...

  2. asp.net MVC 网站图片防盗链的几种方法

    目录 1. 通过 URL Rewrite Module 组件 2. 通过 nginx 图片防盗链 3.自定义 HttpHandler 处理 4. 通过 MVC 自定义路由规则防盗链 5. 通过 MVC ...

  3. ASP.NET 实现简单的图片防盗链介绍

    在此,网站图片防盗链的方法是,通过获取Http请求头中的 Referer 标头与本网站域名比较,来判断用户是否来自本站跳转过来的 . 创建一个全局处理程序,用来处理images目录下的图片的直接请求: ...

  4. Nginx图片防盗链配置

    如果我们自己网站内的图片资源被其它网站所盗用,这会增加自己网站的带宽资源,增加很多额外的消耗,而且会对我们系统的稳定性有影响,为了防止自己网站上的图片资源被其它网站所盗用,我们需要给自己的服务器配置防 ...

  5. Nginx中防盗链(下载防盗链和图片防盗链)操作记录

    日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...

  6. Nginx中防盗链(下载防盗链和图片防盗链)及图片访问地址操作记录

    日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...

  7. Nginx图片防盗链【实战】

    访问我的博客 前言 博主目前在一家原创小说网站公司工作,由于站内的作品全部是原创,于是乎不可避免地会被一些盗版网站爬取盗版,对于防盗版一直没有很好的对策,让公司很是苦恼. 最近去一些盗版网站上搜索我们 ...

  8. 防盗链Nginx设置图片防盗链,设置无效的请仔细看红字

    *******************************************************************切记,替换的图片地址要使用没有防盗链的网站图片,否则由于替换的图片 ...

  9. lnmp/nginx系统真正有效的图片防盗链完整设置详解

    http://www.it300.com/article-15345.html 关于nginx防盗链的方法网上有很多教程,都可以用,但是我发现很多教程并不完整,所做的防盗链并不是真正的彻底的防盗链! ...

随机推荐

  1. Redis源码笔记--服务器日志和函数可变参数处理server.c

    前言 Redis源码中定义了几个和日志相关的函数,用于将不同级别的信息打印到不同的位置(日志文件或标准输出,取决于配置文件的设置),这些函数的定义位于 server.h 和server.c 文件中,包 ...

  2. 口罩预约管理系统——数据库设计(前端+PHP+MySQL)

    目录 一.背景 二.口罩预约管理系统介绍 三.数据库设计 四.MySQL创建数据库以及数据表 五.数据库设计总结 一.背景 2020年的疫情影响了我们的生产生活,政府不断加大力度联防联控,遏制疫情的蔓 ...

  3. 用H5自带拖拽做出购物车效果的作业题

    效果描述: 图片代表物品,图片在有宽高的div上方显示,把图片拖放到设置好的div里面,并且在div里面显示图片的信息:价格,物品名,数量.如果拖放有重复,只是在div里面让物品的数量加1,最后计算出 ...

  4. 常用的Websocket技术一览

    1. 前言 Websocket是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议.WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据 ...

  5. axios+Qs请求数据转表单格式

    import axios from 'axios' import qs from 'qs' axios.post('http://localhost:8888/baseitem/update', qs ...

  6. maximo----对比竞品的优势,以及sp的优势

    众多资产密集型企业对eam产品关注度都很高,尤其是eam产品的功能差别,这与行业差别有直接关系,如电力行业.煤炭行业或石油行业等,各行有各行的运营特点,那么eam产品在共性的基础上定出存在细小差异.下 ...

  7. 再见了SpringMVC!这个框架有点厉害,甚至干掉了Servlet!

    # 前言 对 Java 开发者来说, Spring 发布 5.0 正式版,而新版 Spring 的一大特色,就是 Reactive Web 方案 Web Flux,这是用来替代 Spring Web ...

  8. SpringBoot普通消息队列线程池配置

    1 package com.liuhuan.study.config; 2 3 import com.google.common.util.concurrent.ThreadFactoryBuilde ...

  9. 黑菜菌的JAVA学习笔记

    简介 本文是笔者对<JAVA编程思想>的学习笔记.以自己的思维理解来写下这篇文章,尽可能地简练,易懂.本文将随本人学习进度实时更新 对象导论 抽象过程 汇编语言是对底层机器码的抽象,而面向 ...

  10. Spring整合JDBC(连接池、JDBC模板、Dao配置到Spring容器、配置文件的优化)

    1.Spring整合JDBC (1)导包(共12个): c3p0连接池.JDBC驱动(4个) Spring-jdbc.Spring-tx事务(2个) (2)JDBC模板对象(JDBCTemplate) ...