概述

  对于图片,B网站,如果想使用A网站中的图片,可以直接写上A网站图片的链接地址,或者将A网站的图片通过右键另存为的方式下载到本地,然后在页面上使用。如果A网站不想让B网站这样干,那么A网站可以采取防盗链的措施,如果使用防盗链,B网站想请求A网站所有需要的资源,通过URL的方式,获取的可能不是原来的图片了,出现403或者被别的图片替代。如果想通过浏览器直接打开图片URL,那么仍然有可能显示403,这就是防盗链。

  nginx可以很好的使用防盗链,如下配置:

#nginx配置防盗链
    server {
        listen       81;
        server_name  www.fdl.com;

        location /a {
            root   html;
            proxy_pass  http://www.aproject.com:8080/welcome.jsp;
            index  index.html index.htm;
        }
        
        #access_log  logs/host.access.log  main;
        #拦截所有关于jpg|jpeg|JPG|png|gif|icon格式的请求
        location ~ .*\.(jpg|jpeg|JPG|png|gif|icon)$ {
            #验证blocked来源地址不为空并且符合referers配置的地址
            #none允许来源地址为空
            valid_referers blocked http://www.fdl.com:81/a www.fdl.com:81/a;
            #如果不符合则会return 403
            if ($invalid_referer) {
                rewrite ^/ http://www.aproject.com:8080/img/fei.png;
                #return 403;
            }
        }
    }

案例

  步骤一:创建A,B两个工程

    

  步骤二:在A工程中创建页面访问本工程的图片

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
  <img src="http://www.aproject.com:8080/img/logo.jpg" width="500px" height="300px" />
</body>
</html>

  步骤三:在B工程中创建页面访问A工程的图片

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
  <img src="http://www.fdl.com:81/a/img/logo.jpg" width="500px" height="300px"/>
</body>
</html>

   步骤四:配置nginx.conf文件

#nginx配置防盗链
    server {
        listen       81;
        server_name  www.fdl.com;

        location /a {
            root   html;
            proxy_pass  http://www.aproject.com:8080/welcome.jsp;
            index  index.html index.htm;
        }
        
        #access_log  logs/host.access.log  main;
        #拦截所有关于jpg|jpeg|JPG|png|gif|icon格式的请求
        location ~ .*\.(jpg|jpeg|JPG|png|gif|icon)$ {
            #验证blocked来源地址不为空并且符合referers配置的地址
            #none允许来源地址为空
            valid_referers blocked http://www.fdl.com:81/a www.fdl.com:81/a;
            #如果不符合则会return 403
            if ($invalid_referer) {
                rewrite ^/ http://www.aproject.com:8080/img/fei.png;
                #return 403;
            }
        }
    }

  步骤五:启动,实现效果

    使用nginx防盗链,B项目访问A项目中的图片的不行的,算是非法请求;

    

    如果A项目访问自己项目中的图片时可以的,不算是非法请求;

    

 posted on 2020-02-10 15:40  wnwn  阅读(167)  评论(0编辑  收藏  举报