Nginx防盗链
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx防盗链相关的知识,希望对你有一定的参考价值。
nginx防盗链防盗链基于客户端携带的referer实现,referer是记录打开一个页面之前记录是从哪个页面跳转过来的标记信息,如果别人只链接了自己网站的图片或某个单独的资源,而不是打开整个页面,这就是盗链,referer就是之前的那个网站域名,正常的referer信息有以下几种
none:请求报文没有referer首部,比如用户直接在浏览器输入域名访问往web网站,就是么有referer信息
blocked:请求报文由referer信息,但无又有效值为空
server_names:referer首部中包含本主机及nginx监听的server_name
arbitrary_string:自定义指定字符串,但使用作通配符
regular experssion:被指定的正则表达式模式匹配到的字符串,需要使用~开头,如:~..magedu.com
防盗链的实现
准备2台虚拟服务器,一个域名为www.mylinuxops.com,另一个域名为www.melinuxops.com
1.www.mylinuxops.com配置文件及站点内容
[[email protected] www]# vim /apps/nginx/conf/servers/vs.conf
server
server_name www.mylinuxops.com;
location /
root /data/www;
index index.html;
站点资源
[[email protected] www]# tree /data/www
/data/www
├── index.html
└── tupian.gif
0 directories, 2 files
2.www.melinuxops.com配置文件及站点内容
[[email protected] www]# vim /apps/nginx/conf/servers/vs.conf
server
server_name www.melinuxops.com;
location /
root /data/www;
index index.html;
站点资源
[[email protected] ~]# tree /data/www/
/data/www/
└── index.html
0 directories, 1 file
[[email protected] ~]# cat /data/www/index.html #次为盗链的文件
<!DOCTYPE html>
<html long="en">
<head>
<meta charset="UTF-8">
<title>盗链页面</title>
</head>
<body>
<a href="http://www.mylinuxops.com">盗链测试</a>
<img src="http://www.mylinuxops.com/tupian.gif">
</body>
</html>
未设置防盗链访问测试
访问www.mylinuxops.com/tupian.gif
访问盗链站点www.melinuxops.com
查看日志被盗链站点日志
172.20.136.96 - - [01/Jun/2019:10:57:06 +0800] "GET /tupian.gif HTTP/1.1" 200 489620 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
172.20.136.96 - - [01/Jun/2019:10:59:11 +0800] "GET /tupian.gif HTTP/1.1" 200 489620 "http://www.melinuxops.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
#第二条日志为被盗链的日志
设置防盗链
基于访问安全考虑,nginx支持通过ngx_http_referer_module模块,检查访问者请求的referer信息是否有效,实现防盗链。
实现方法
修改www.mylinuxops.com的配置文件
[[email protected] www]# vim /apps/nginx/conf/servers/vs.conf
server
server_name www.mylinuxops.com;
access_log /apps/nginx/logs/access.log main;
location /
root /data/www;
index index.html;
valid_referers none blocked server_names *.mylinuxops.com mylinuxopx.* ~\.google\.;
if ( $invalid_referer )
return 403;
location = /favicon.ico
log_not_found off;
access_log off;
再次访问盗链站点
以上是关于Nginx防盗链的主要内容,如果未能解决你的问题,请参考以下文章
Nginx系列:Nginx + keepalived 实现高可用 + 防盗链 + 动静分离
Nginx防盗链Nginx访问控制Nginx解析php相关配置Nginx代理