利用nginx配置防盗链和屏蔽ip

介绍

通常来说个人网站不希望别的网站盗用自己的图片和视频,毕竟流量这些都是白花花的银子(如果你是土豪可以忽略这点~~),

这个时候就需要再nginx里面配置一些参数来防盗链。

配置

这边解析个测试域名(test.czkup.cn),查看一下nginx里面的配置。

1
2
3
4
5
6
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log off;
}

这是关于访问后缀为gif|jpg|jpeg|png|bmp|swf文件时的配置,访问是不受限制的。

1
2
3
4
5
6
7
8
9
10
11
12
# curl http://test.czkup.cn/liuyan.png -I
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 03 Nov 2020 08:15:52 GMT
Content-Type: image/png
Content-Length: 3085
Last-Modified: Tue, 03 Nov 2020 06:40:39 GMT
Connection: keep-alive
ETag: "5fa0fb67-c0d"
Expires: Thu, 03 Dec 2020 08:15:52 GMT
Cache-Control: max-age=2592000
Accept-Ranges: bytes

这个时候访问可以成功。

现在把这个配置修改一下。

1
2
3
4
5
6
7
8
9
10
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
valid_referers none blocked test.czkup.cn;
if ($invalid_referer) {
return 403;
}
expires 30d;
error_log off;
}

valid_referers这个语法后面有几个参数:valid_referers [none|blocked|server_names]

  • none

表明头部请求参数Referer为空的情况下。

  • blocked

表明头部请求参数Referer不为空,但是里面的值被代理或防火墙删除了,通常这个值都不以http://或https://开头

  • server_names

表示一个或多个主机名,多个主机名用空格隔开。

配置好后,我们在测试一下。

这是不带http_referde 请求,可以看到访问正常。

1
2
3
4
5
6
7
8
9
10
11
12
13
# curl http://test.czkup.cn/liuyan.png -I
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 03 Nov 2020 09:10:33 GMT
Content-Type: image/png
Content-Length: 3085
Last-Modified: Tue, 03 Nov 2020 06:40:39 GMT
Connection: keep-alive
ETag: "5fa0fb67-c0d"
Expires: Thu, 03 Dec 2020 09:10:33 GMT
Cache-Control: max-age=2592000
Accept-Ranges: bytes

这是带非法http_referde请求的结果。

1
2
3
4
5
6
7
8
# curl -e "http://www.baidu.com"  http://test.czkup.cn/liuyan.png -I
HTTP/1.1 403 Forbidden
Server: nginx
Date: Tue, 03 Nov 2020 09:11:02 GMT
Content-Type: text/html
Content-Length: 146
Connection: keep-alive

上面带了非法http_referde请求的话就是会返回403,说明我们刚刚配置的已经生效了。

再试一次带合法http_referde请求状态。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# curl -e "http://test.czkup.cn"  http://test.czkup.cn/liuyan.png -I
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 03 Nov 2020 09:19:25 GMT
Content-Type: image/png
Content-Length: 3085
Last-Modified: Tue, 03 Nov 2020 06:40:39 GMT
Connection: keep-alive
ETag: "5fa0fb67-c0d"
Expires: Thu, 03 Dec 2020 09:19:25 GMT
Cache-Control: max-age=2592000
Accept-Ranges: bytes


屏蔽ip

最近查看访问日志看到很多404的请求。

需要屏蔽一些ip。

打开nginx配置文件。在对应的server的里面加上需要屏蔽的ip

1
deny 1.2.3.4;  屏蔽单个ip