NGINX中浏览器的盗链与防止被盗的实现

 更新时间:2025年07月15日 10:18:16   作者:俗_人  
本文介绍在局域网内实现盗链与防盗链的配置方法,通过Nginx设置valid_referers限制资源访问来源,非法引用返回403禁止访问,感兴趣的可以了解一下

1、盗链的实现(本项目仅供参考,在局域网内实现,请遵守相关法律)

1.1 准备操作

我们需要两台主机,一台为Ubuntu,作为偷盗机,一台centos作为被盗机,具体配置以及IP地址如下表:

名称IP地址CPU内存nginx安装方式
centos192.168.107.19022编译安装
Ubuntu192.168.107.18022apt安装

1.2 nginx的安装

nginx的安装在此就不再赘述

见如下状态

#centos
[root@localhost ~]# systemctl start nginx.service 
[root@localhost ~]# systemctl status nginx.service 
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since 三 2025-05-07 19:40:01 CST; 24s ago
     Docs: http://nginx.org/en/docs/
  Process: 1958 ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf (code=exited, status=0/SUCCESS)
 Main PID: 1961 (nginx)
   CGroup: /system.slice/nginx.service
           ├─1961 nginx: master process /apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
           ├─1962 nginx: worker process
           └─1963 nginx: worker process

5月 07 19:40:01 localhost.localdomain systemd[1]: Starting nginx - high performance web server...
5月 07 19:40:01 localhost.localdomain systemd[1]: Started nginx - high performance web server.
[root@localhost ~]# 

#ubnutu
root@ubuntu:~# systemctl start nginx
root@ubuntu:~# systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2025-05-07 11:22:53 UTC; 17min ago
       Docs: man:nginx(8)
    Process: 958 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 966 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 967 (nginx)
      Tasks: 3 (limit: 4519)
     Memory: 9.1M
        CPU: 158ms
     CGroup: /system.slice/nginx.service
             ├─967 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             ├─968 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
             └─969 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

May 07 11:22:53 ubuntu systemd[1]: Starting A high performance web server and a reverse proxy server...
May 07 11:22:53 ubuntu systemd[1]: Started A high performance web server and a reverse proxy server.
root@ubuntu:~# 

1.3 实现盗链

ubuntu操作

root@ubuntu:~# cd /var/www/html/
root@ubuntu:/var/www/html# ls
index.html  index.html.bak
root@ubuntu:/var/www/html# vim index.html
root@ubuntu:/var/www/html# 
#index.html文件内容如下
<html>
<body>
<h1>this is ailun-yegeyu  </h1>
<img src="http://192.168.107.190/a.jpg"/>
</body>
</html>
~        

centos操作

[root@localhost data]# cd /apps/nginx/conf.d/
[root@localhost conf.d]# ls
ailun.conf
[root@localhost conf.d]# vim ailun.conf

主站点目录为根目录下的data文件夹

我们在站点目录下拖入一张a.jpg

[root@localhost ~]# cd /data/
[root@localhost data]# ls
a.jpg  index.html  main  test

网站测试
http://192.168.107.180/index.html

2、防盗链的实现

配置文件如下

server{
listen 80;
server_name www.ailun.com;
root /data/;

location ~* \.(jpg|gif|swf|png)$ {
         valid_referers none 192.168.107.190;
         if ( $invalid_referer ) {
           return  403;
           #rewrite ^/ http://192.168.107.190/error.png;
           }
        }


}

这段代码是 Nginx 的配置文件片段,主要作用是配置一个虚拟主机,并且对特定类型的文件进行防盗链处理。下面是对代码各部分的详细解释:

1. 服务器监听配置

listen 80;
server_name www.ailun.com;
root /data/;
  • listen 80;:指定 Nginx 监听 80 端口,这是 HTTP 协议的默认端口。也就是说,当有客户端通过 80 端口发起 HTTP 请求时,Nginx 会对其进行处理。
  • server_name www.ailun.com;:定义了该虚拟主机的域名。当客户端访问 www.ailun.com 时,Nginx 会使用这个配置块来处理请求。
  • root /data/;:设置该虚拟主机的根目录为 /data/。当客户端请求一个文件时,Nginx 会在 /data/ 目录下查找对应的文件。

2. 特定文件类型的位置块配置

location ~* \.(jpg|gif|swf|png)$ {
  • location 是 Nginx 中用于匹配请求 URI 的指令。
  • ~* 表示使用不区分大小写的正则表达式进行匹配。
  • \.(jpg|gif|swf|png)$ 是一个正则表达式,用于匹配以 .jpg.gif.swf.png 结尾的请求 URI。也就是说,当客户端请求这些类型的文件时,会进入这个 location 块进行处理。

3. 防盗链配置

valid_referers none 192.168.107.190;
  • valid_referers 指令用于指定合法的 Referer 头部值。Referer 头部会在浏览器请求资源时携带,用于表示请求是从哪个页面发起的。
  • none 表示允许没有 Referer 头部的请求,也就是直接在浏览器地址栏输入资源链接的请求。
  • 192.168.107.190 表示允许从 IP 地址为 192.168.107.190 的页面发起的请求。

4. 非法引用处理

if ( $invalid_referer ) {
    return  403;
    #rewrite ^/ http://192.168.107.190/error.png;
}
  • $invalid_referer 是 Nginx 的一个内置变量,如果请求的 Referer 头部值不在 valid_referers 指定的列表中,这个变量的值为 1,否则为 0
  • if ( $invalid_referer ) 表示如果 Referer 头部值不合法,则执行 if 块内的代码。
  • return 403; 表示返回 403 状态码,即禁止访问。客户端会收到一个“禁止访问”的错误页面。
  • #rewrite ^/ http://192.168.107.190/error.png; 这行代码被注释掉了。如果取消注释,当 Referer 头部值不合法时,会将请求重定向到 http://192.168.107.190/error.png

3、验证

经过笔者的多次验证,我们在原先的浏览器上仍然可以访问到这张图片

我们只能将这种原因归结于浏览器的缓存问题

我们选择换几个浏览器测试

在另一台centos的火狐浏览器上

在windows10浏览器中

我们可以观察到页面已经变成了403,防盗链实验成功

到此这篇关于NGINX中浏览器的盗链与防止被盗的实现的文章就介绍到这了,更多相关NGINX 浏览器盗链与防止被盗内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx配置ssl支持https全过程(docker版)

    Nginx配置ssl支持https全过程(docker版)

    在Docker环境中配置Nginx使用SSL涉及准备SSL证书和密钥、编写Nginx配置文件以及使用Docker运行Nginx,首先,需获取SSL证书和密钥,可以是自签名或由CA颁发,编写Nginx配置文件时,确保正确引用证书和密钥路径,通过Docker命令或Docker Compose运行Nginx容器
    2024-10-10
  • 详解Nginx location 匹配规则

    详解Nginx location 匹配规则

    本篇文章主要介绍了Nginx location 匹配规则,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Nginx使用try_files遇到的问题及解决

    Nginx使用try_files遇到的问题及解决

    这篇文章主要介绍了Nginx使用try_files遇到的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-10-10
  • Nginx Lua 根据参数请求转发的实现

    Nginx Lua 根据参数请求转发的实现

    本文介绍了如何使用Nginx和Lua脚本实现基于参数的请求转发,文章详细说明了配置方法,并提供了示例代码,帮助读者理解如何通过NginxLua模块根据请求参数将流量转发到不同后端服务,这种方法有助于实现灵活的负载均衡和动态内容处理
    2022-05-05
  • Nginx配置及热升级的详细介绍

    Nginx配置及热升级的详细介绍

    Nginx与Apache一样,都是web服务器,但是Nginx比Apache多一些功能,比如Nginx可以做代理,可以做负载均衡,这篇文章主要介绍了Nginx配置以及热升级,需要的朋友可以参考下
    2024-07-07
  • Nginx配置移动端和PC端自动跳转方式

    Nginx配置移动端和PC端自动跳转方式

    文章介绍了如何通过Nginx配置PC端和移动端自动跳转,PC端和移动端各有独立的域名,PC端访问任何域名时会跳转到www.yxf.com,移动端访问任何域名时会跳转到m.yxf.com,配置时需要修改Nginx的conf文件,使用302或301重定向
    2025-11-11
  • Nginx服务优化配置方案

    Nginx服务优化配置方案

    这篇文章主要介绍了Nginx服务优化配置方案,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-03-03
  • 检查 Nginx 是否启动的几种方法

    检查 Nginx 是否启动的几种方法

    本文主要介绍了检查 Nginx 是否启动的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-12-12
  • docker部署nginx并且挂载文件夹和文件操作

    docker部署nginx并且挂载文件夹和文件操作

    这篇文章主要介绍了docker部署nginx并且挂载文件夹和文件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • lnmp环境中如何为nginx开启pathinfo

    lnmp环境中如何为nginx开启pathinfo

    这篇文章主要介绍了lnmp环境中如何为nginx开启pathinfo的方法,操作很简单,需要的朋友可以参考下
    2015-01-01

最新评论