Nginx-防盗链

目录

一、什么是盗链

如何区分哪些是不正常的用户?

Referer理解 

二、Nginx配置防盗链

 三、使用 curl 测试防盗链

四、企业实战

1.设置返回错误页面

2.整合 rewrite 返回报错图片


一、什么是盗链

        在实际生产过程中,我们线上的图片等静态资源,经常会被其他网站盗用,他们发大财的同时,成本确实我们在买单,下面来说下,如何杜绝这种行为。
        应该说只要是静态资源都是可以防盗链的,只需要在Server字段加上几行代码即可。众所周知网站出名了后,会有各种刁民来找茬的,最常见的就是爬你网站的东西。
    关于防盗链这里不得不提一下网页的加载顺序是先加载HTML相关的内容,然后解析HTML的内容,那些需要加载图片,那些需要加载文件,是逐步加载的,所以可以在加载静态资源的时候做防盗链的操作,例如:在加载图片的时候直接跳转去其他链接,或者直接返回404,403等错误代码,拒绝它的请求。

如何区分哪些是不正常的用户?

        HTTP Referer是Header的一部分,当浏览器向Web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理,例如防止未经允许的网站盗链图片、文件等。因此HTTP Referer头信息是可以通过程序来伪装生成的,所以通过Referer信息防盗链并非100%可靠,但是,它能够限制大部分的盗链情况.
        比如在www.google.com 里有一个 www.baidu.com 链接,那么点击这个www.baidu.com ,它的header 信息里就有:Referer=http://www.google.com

Nginx-防盗链_第1张图片

Referer理解 

        HTTP 协议中有一个用来表示“页面或资源”来源的“请求头”,这个请求头叫做 Referer --> Referer是表示请求是从哪个网址发出的
        防盗链功能基于HTTP协议支持的 Referer 机制,通过Referer跟踪来源,对来源进行识别和判断

二、Nginx配置防盗链

为了模拟盗链,在这里让101为网站服务站点,102为网关服务器,103访问101进行盗链。

修改 102 Nginx 配置文件:

Nginx-防盗链_第2张图片

此时在浏览器输入102ip,可以正常访问101站点。

如果不想被盗链,则对101站点服务修改Nginx配置文件,防盗链的配置可以在任意的 location 模块下设置,不能在 server 下,你不想让别人盗链哪个资源就在那个资源的 location 模块下设置防盗链:

Nginx-防盗链_第3张图片

测试效果,用102ip去访问,css等静态资源返回403,获取不到:

Nginx-防盗链_第4张图片 

1.# 格式:
valid_referers none | blocked | server_names | strings ....;

--none:允许没有http_refer的请求访问资源,检测 Referer 头域不存在的情况,则可以访问。

--blocked:检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。这种情况该头域的值不以
“http://” 或 “https://” 开头。允许不是http://开头的,不带协议的请求访问资源。

--server_names :只允许指定ip/域名来的请求访问资源(白名单)。可设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某一个。在生产环境中尽量使用域名,不使用ip。

2.# 举例

valid_referers 192.168.44.101;
if ($invalid_referer) {
return 403;
}

 三、使用 curl 测试防盗链

1.# 安装 curl 命令
yum -y install curl

2.# 测试,在 103 机器中访问 101
curl -I http://192.168.44.101/img/logo.png

-I:不带 Referer ,只是给我们返回响应的一些头信息。

curl -e "http://baidu.com" -I http://192.168.44.101/img/logo.png

-e:"http://baidu.com" 为 Referer,返回响应的一些头信息

Nginx-防盗链_第5张图片

四、企业实战

1.设置返回错误页面

在 101 Nginx 中 创建一个 401文件:

vim /usr/local/nginx/html/401.html





Error



An error occurred.

非法请求

Faithfully yours, nginx.

 修改 101 配置文件,在下面添加一个 error_page 模块:

Nginx-防盗链_第6张图片

测试效果,在浏览器输入 102ip 访问站点的图片,返回下面信息:

Nginx-防盗链_第7张图片

2.整合 rewrite 返回报错图片

在 101 站点服务器中 创建 img 目录 /usr/local/nginx/html/img ,往里面 添加一张图片 x.png,修改配置文件:

Nginx-防盗链_第8张图片

在浏览器输入 102ip 访问到101 网址页面,图片位置上显示 x.png :

 

 

你可能感兴趣的:(Nginx,服务器,java,数据库)