1、盗链的实现(本项目仅供参考,在局域网内实现,请遵守相关法律)
1.1 准备操作
我们需要两台主机,一台为Ubuntu,作为偷盗机,一台centos作为被盗机,具体配置以及IP地址如下表:
名称 | IP地址 | CPU | 内存 | nginx安装方式 |
---|---|---|---|---|
centos | 192.168.107.190 | 2 | 2 | 编译安装 |
Ubuntu | 192.168.107.180 | 2 | 2 | apt安装 |
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,防盗链实验成功