实验环境

  • 一台最小化安装的CentOS 7.3虚拟机
  • 配置:1核心/512MB
  • nginx版本1.12.2

一、配置盗链网站

1.启动一台nginx虚拟机,配置两个网站

vim /etc/nginx/conf.d/vhosts.conf

添加以下内容

server {
listen 80;
server_name site1.test.com;
root /var/wwwroot/site1;
index index.html; location / {
}
} server {
listen 80;
server_name site2.test.com;
root /var/wwwroot/site2;
index index.html; location / {
}
}

2.在宿主机编辑C:\Windows\System32\drivers\etc\hosts文件

192.168.204.11      site1.test.com
192.168.204.11 site2.test.com

3.创建网站根目录

mkdir /var/wwwroot
cd /var/wwwroot
mkdir site1
mkdir site2
echo -e "<h1>site1</h1><img src='1.jpg'>" >> site1/index.html
echo -e "<h1>site2</h1><img src='http://site1.test.com/1.jpg'>" >> site2/index.html

4.将1.jpg上传到/var/wwwroot/site1目录

5.启动nginx服务

systemctl restart nginx
netstat -anpt | grep nginx

6.防火墙放通80端口

setenforce 0
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

7.在宿主机访问

http://site1.test.com

http://site2.test.com

二、配置site1.test.com防盗链

1.编辑nginx配置文件

server {
listen 80;
server_name site1.test.com;
root /var/wwwroot/site1;
index index.html; location / {
} location ~ \.(jpg|png|gif|jpeg)$ {
valid_referers site1.test.com;
if ($invalid_referer) {
return 403;
}
}
} server {
listen 80;
server_name site2.test.com;
root /var/wwwroot/site2;
index index.html; location / {
}
}

2.重启nginx服务

systemctl restart nginx

3.在宿主机访问

清除浏览器缓存,访问http://site1.test.com

清除浏览器缓存,访问http://site2.test.com

可见,防盗链配置起到了作用

三、配置防盗链返回其他资源

1.编辑nginx配置文件

增加一个虚拟主机,对防盗链保护的资源进行重写

server {
listen 80;
server_name site1.test.com;
root /var/wwwroot/site1;
index index.html;
location / {
}
location ~ \.(jpg|png|gif|jpeg)$ {
valid_referers site1.test.com;
if ($invalid_referer) {
rewrite ^/ http://site3.test.com/notfound.jpg;
#return 403;
}
}
}
server {
listen 80;
server_name site2.test.com;
root /var/wwwroot/site2;
index index.html;
location / {
}
}
server {
listen 80;
server_name site3.test.com;
root /var/wwwroot/site3;
index index.html;
location / {
}
}

解释

location ~ \.(jpg|png|gif|jpeg)$ {}为设置防盗链的文件类型,使用竖线|分隔。

valid_referers site1.test.com *.nginx.org;为白名单,使用空格分隔,可以使用*进行泛域名设置。

if ($invalid_referer) {}为判断是否符合白名单,不符合白名单将执行{}内的内容。

rewrite ^/ http://site3.test.com/notfound.jpg;为重写资源,如果不合符白名单,则重写为该地址。

return 403;代表返回的状态码为403。

2.建立site3根目录

cd /var/wwwroot
mkdir site3
echo -e "<h1>site3</h1><img src='notfound.jpg'>" >> site3/index.html

3.上传notfound.jpg文件至/var/wwwroot/site3目录

4.重启nginx服务

systemctl restart nginx

5.在宿主机编辑C:\Windows\System32\drivers\etc\hosts文件

增加对site3.test.com的映射

192.168.204.11      site1.test.com
192.168.204.11 site2.test.com
192.168.204.11 site3.test.com

6.在宿主机访问http://site2.test.com

可以看到,在site2中盗用的site11.jpg文件,被重定向到了site3上的notfound.jpg文件

本文链接: https://www.cnblogs.com/connect/p/nginx-anti-theft-chain.html

配置Nginx的防盗链的更多相关文章

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

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

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

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

  3. nginx实现防盗链配置方法介绍

    有些朋友觉得防盗链就是防止图片,其实有很多东西要进行防盗链了,下面我来介绍在nginx中实现防盗链配置方法有对图片防盗链与下载资源等. 防盗链配置 假设网站域名是 www.php100.com. 编辑 ...

  4. nginx安全:配置网站图片防盗链

    一,为什么要做防盗链? 1,什么是盗链? 比如某人有一个A网站, 他不愿自己存储图片,(因为磁盘和带宽都有成本) 就在自己A网站的页面上直接插入B网站的图片, 从而为自己吸引流量,这就是盗链 2,为什 ...

  5. Nginx图片防盗链配置

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

  6. Nginx 之防盗链配置

    首先,我们需要知道通过什么来实现防盗的! http referer 是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上referer,这是在告诉服务器是从哪个页面链接过来的,服务 ...

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

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

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

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

  9. nginx作防盗链设置

    盗链是一种损害原有网站合法权益,给原网站所在服务器造成额外负担的非法行为. 盗链的实现原理: 客户端向服务器请求资源时,为了减少网络带宽,提高响应时间,服务器一般不会一次将所有资源完整地传回给客户端. ...

随机推荐

  1. WPF 精修篇 移动TranslateTransform

    原文:WPF 精修篇 移动TranslateTransform 移动 TranslateTransform X 移动X轴 Y 移动Y轴 <StackPanel Orientation=" ...

  2. TCP的三次握手过程?为什么会采用三次握手,若采用二次握手可以吗

    谢希仁版<计算机网络>中的例子: "已失效的连接请求报文段”的产生在这样一种情况下: client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误 ...

  3. 我是如何一步步编码完成万仓网ERP系统的(十四)库存 3.库存日志

    https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...

  4. ES6 对象的拓展(三)

    一.对象中的属性及方法1.属性属性简写:当对象属性名与属性值变量相同可以简写eg: let [name,age]=['nzc','18']; let obj = { name:name, age:ag ...

  5. Python 之configparser读取配置操作类

    一.为什么要封装 我们为什么要封装,我相信你们在项目开发过程中深有体会,那么这个读取配置工具类,又是为了什么? 为了项目参数配置的灵活性,不要改动到源码 为了信息的安全(一定层面的),体现代码重用性 ...

  6. 不懂APS系统?十个问答让你对APS瞬间明明白白

    本文为您解答APS自动排程系统导入中客户常见的问题,帮助您评估企业是否适合导入APS,并了解需要的人力和资金的投入. Q1:哪些企业需要导入APS? A1: 编制生产计划有困难的企业都可以开始考虑导入 ...

  7. Android中webview html5 自动播放本地视频

    MainActivity代码 public class Html5VideoAutoPlay extends Activity { WebView webview = null; @Override ...

  8. 设置注释 idea

    https://blog.csdn.net/weixin_42679529/article/details/81059598 groovyScript("def result=''; def ...

  9. Spring入门。

    程序的耦合和解耦. 1.问题引入. 在使用jdbc和数据库交互时.注册驱动:DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());如 ...

  10. c语言基础之getopt()

    getopt() #include <unistd.h> int getopt(int argc, char * const argv[], const char *optstring); ...