如何配置Nginx的防盗链

发布时间 - 2023-05-12 00:00:00    点击率:

实验环境

•一台最小化安装的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 "

site1

@@##@@" >> site1/index.html echo -e "

site2

@@##@@" >> 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.在宿主机访问

二、配置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.在宿主机访问

清除浏览器缓存,访问

清除浏览器缓存,访问

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

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

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 ^/ ;为重写资源,如果不合符白名单,则重写为该地址。
return 403;代表返回的状态码为403。

2.建立site3根目录

cd /var/wwwroot
mkdir site3
echo -e "

site3

@@##@@" >> 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.在宿主机访问

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


# nginx  # 防盗链  # 重写  # 一台  # 重启  # 配置文件  # 可以看到  # 可以使用  # 不符合  # 盗链  # 是否符合 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何基于PHP生成高效IDC网络公司建站源码?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  如何快速完成中国万网建站详细流程?  如何快速搭建虚拟主机网站?新手必看指南  BootStrap整体框架之基础布局组件  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  Laravel如何集成Inertia.js与Vue/React?(安装配置)  Linux系统命令中screen命令详解  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  个人网站制作流程图片大全,个人网站如何注销?  Bootstrap整体框架之CSS12栅格系统  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  Laravel如何实现API速率限制?(Rate Limiting教程)  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  在centOS 7安装mysql 5.7的详细教程  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  如何快速生成ASP一键建站模板并优化安全性?  如何彻底删除建站之星生成的Banner?  Laravel如何创建自定义Artisan命令?(代码示例)  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  大连网站制作公司哪家好一点,大连买房网站哪个好?  如何在阿里云香港服务器快速搭建网站?  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  如何挑选高效建站主机与优质域名?  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  Swift中swift中的switch 语句  音响网站制作视频教程,隆霸音响官方网站?  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  如何在 React 中条件性地遍历数组并渲染元素  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  如何在云指建站中生成FTP站点?  WEB开发之注册页面验证码倒计时代码的实现  什么是javascript作用域_全局和局部作用域有什么区别?  Laravel如何使用Service Container和依赖注入?(代码示例)  Angular 表单中正确绑定输入值以确保提交与验证正常工作  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  Python数据仓库与ETL构建实战_Airflow调度流程详解  怎样使用JSON进行数据交换_它有什么限制  高性能网站服务器部署指南:稳定运行与安全配置优化方案