# Nginx教程 - 15 Nginx防盗链
什么是盗链?
盗链(Leeching or Hotlinking)是指一个网站未经允许,直接链接并使用另一个网站的资源(如图片、视频、音频等)。这种做法会导致被盗链的网站的带宽和服务器资源被占用,从而增加其运营成本和服务器负载。
例如,我在我的网站嵌入别人网站的图片,每次请求我的网站,都会从别人的网站加载资源,从而消耗别人网站的带宽。
什么是防盗链?
顾名思义,就是预防别人盗链,限制和保护网站资源的访问和使用。
# 15.1 防盗链的原理
打开浏览器开发者工具,我在我的网站上,查看图片的网络请求信息,可以看到请求头中包含了一个 Referer
,这个 Referer
表示是从哪个页面发起的请求,我们可以根据这个字段判断是否是他人网站请求的。
例如,我百度搜索逗比笔记
,然后从搜索结果跳转到本站,可以看到请求的 Referer
是从百度来的,如下:
所以防盗链的原理就是判断 Referer
是否是本网站,如果是从浏览器直接请求,则 Referer
为空。
# 15.2 Nginx防盗链配置
在 Nginx 配置文件中,针对 server ,拦截指定的请求,进行防盗链配置:
server {
listen 80;
server_name www.doubibiji.com;
location / {
root /home/doubi/html; # 站点根目录
index index.html;
}
location ~* \.(jpg|jpeg|png|gif)$ { # 匹配任何以gif、jpg、jpeg等结尾的文件
valid_referers none blocked *.doubibiji.com *.yourpartner.com 192.168.0.108;
# 防盗链配置,如果Referer无效,则返回403 Forbidden
if ($invalid_referer) {
return 403;
}
root /home/doubi/html; # 一定要配置,否则符合referer要求的请求,找不到资源
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
在上面的配置中,拦截了 gif/jpg/jpeg
等结尾的文件,然后判断文件的 referer
是否是允许的域名或IP。
- valid_referers:指定哪些Referer是有效的。可以使用多个值,用空格分隔。
none
表示允许没有Referer的请求,blocked
表示允许被防火墙或代理服务器移除的Referer请求,其他值则允许的域名或IP。 - if ($invalid_referer):如果请求的Referer不在
valid_referers
中定义的范围内,则此条件为真,返回403。
上面的两个 location
都配置了相同站点根目录,我们也可以将站点根目录配置为全局的,这样 location
中就不用配置 root
了,修改配置如下:
server {
listen 80;
server_name www.doubibiji.com;
root /home/doubi/html; # 全局指定站点根目录
index index.html; # 首页
location / {
# ...其他配置
}
location ~* \.(jpg|jpeg|png|gif)$ { # 匹配任何以gif、jpg、jpeg等结尾的文件
valid_referers none blocked *.doubibiji.com *.yourpartner.com 192.168.0.108;
# 防盗链配置,如果Referer无效,则返回403 Forbidden
if ($invalid_referer) {
return 403;
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
← 14-访问控制