Nginx#Nginx防盗链配置

基础知识

防盗链配置

配置要点:

[root@nginx-server ~]# vim /etc/nginx/nginx.conf
# 日志格式添加"$http_referer"
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                         '$status $body_bytes_sent "$http_referer" '
                         '"$http_user_agent" "$http_x_forwarded_for"';
# valid_referers 使用方式   
#valid:有效的
Syntax: 	valid_referers none | blocked | server_names | string ...;
Default: 	—
Context: server, location
  • none : 允许没有http_refer的请求访问资源,允许直接访问我的资源;

  • blocked : 允许不是http://开头的,不带协议的请求访问资源;

  • server_names : 只允许指定ip/域名来的请求访问资源(白名单);

    none和blocked一起使用,允许通过网站直接访问我的图片资源

    准备两台机器,两张图片(缓存问题)

    配置nginx配置文件,并上传图片
    [root@nginx-server html]# vim /etc/nginx/conf.d/nginx.conf
    server {
          
          
        listen       80;
        server_name  localhost;
    
        location / {
          
          
             root   /usr/share/nginx/html;
             index  index.html index.htm;
    
             valid_referers none blocked *.qf.com 10.0.105.202;
                    if ($invalid_referer) {
          
          
                       return 403;
                    }
            }
        location ~  .*\.(gif|jpg|png|jpeg)$ {
          
          
             root  /usr/share/nginx/html;
    
             valid_referers  qf.com 10.0.105.202;
                    if ($invalid_referer) {
          
          
                       return 403;
                    }
            }
    }
    
    重载nginx服务
    [root@nginx-server ~]# nginx -s reload -c /etc/nginx/nginx.conf
    
    第二台机器客户端
    配置nginx访问页面
    创建页面
    [root@nginx-server nginx]# vim index.html
    <html>
    <head>
        <meta charset="utf-8">
        <title>qf.com</title>
    </head>
    <body style="background-color:red;">
        <img src="http://10.0.105.202/test.jpg"/>
    </body>
    </html>
    
    测试不带http_refer:
    [root@nginx-server nginx]# curl -I "http://10.0.105.202/test1.png"
    HTTP/1.1 200 OK
    Server: nginx/1.16.0
    Date: Thu, 27 Jun 2019 16:21:13 GMT
    Content-Type: image/png
    Content-Length: 235283
    Last-Modified: Thu, 27 Jun 2019 11:27:11 GMT
    Connection: keep-alive
    ETag: "5d14a80f-39713"
    Accept-Ranges: bytes
    
    测试带非法http_refer:
    [root@nginx-server nginx]# curl -e http://www.baidu.com -I "http://10.0.105.202/test.jpg"
    HTTP/1.1 403 Forbidden
    Server: nginx/1.16.0
    Date: Thu, 27 Jun 2019 16:22:32 GMT
    Content-Type: text/html
    Content-Length: 153
    Connection: keep-alive
    
    测试带合法的http_refer:
    [root@nginx-server nginx]# curl -e http://10.0.105.202 -I "http://10.0.105.202/test.jpg"
    HTTP/1.1 200 OK
    Server: nginx/1.16.0
    Date: Thu, 27 Jun 2019 16:23:21 GMT
    Content-Type: image/jpeg
    Content-Length: 27961
    Last-Modified: Thu, 27 Jun 2019 12:28:51 GMT
    Connection: keep-alive
    ETag: "5d14b683-6d39"
    Accept-Ranges: bytes
    
    5、其他配置
    5.1、匹配域名
#    location ~  .*\.(gif|jpg|png|jpeg)$ {
    
    
#        root  /usr/share/nginx/html;

#         valid_referers none blocked qf.com 10.0.105.202;
#               if ($invalid_referer) {
    
    
#                  return 403;
#               }
#       }
    location ~ .*\.(gif|jpg|png|jpeg)$ {
    
    
        root  /usr/share/nginx/html;

        valid_referers 10.0.105.202 *.baidu.com *.google.com;
                if ($invalid_referer) {
    
    
                rewrite ^/ http://10.0.105.202/test.jpg;
                #return 403;
                }
        }

以上所有来自 qf.com 和域名中google和baidu的站点都可以访问到当前站点的图片,如果来源域名不在这个列表中,那么$invalid_referer等于1,在if语句中返回一个403给用户,这样用户便会看到一个403的页面,如果使用下面的rewrite,那么盗链的图片都会显示403.jpg。如果用户直接在浏览器输入你的图片地址,那么图片显示正常,因为它符合none这个规则。

实验操作

服务器:172.17.0.6
盗链服务器:172.17.0.7
1、服务器没有设置防盗链,服务器有一个图片.a.jpg
172.17.0.6的网站发布目录
在这里插入图片描述
浏览器访问测试
在这里插入图片描述
图片显示正常,跳转baidu正常
查看访问日志
在这里插入图片描述
发现不带http_referer,就是正常访问

盗链网站的网站发布目录

在这里插入图片描述
浏览器访问盗链网站
在这里插入图片描述
图片正常,跳转正常,盗链成功
被盗服务器访问日志
在这里插入图片描述
http_referer是172.17.0.7
访问是跳转链接,发现被盗链,开启防盗链

猜你喜欢

转载自blog.csdn.net/kakaops_qing/article/details/109045398
今日推荐