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访问控制Nginx解析php相关配置Nginx代理

Nginx防盗链访问控制 解析php相关配置及Nginx代理

nginx 防盗链

nginx 图片防盗链 设置