获取全套nginx教程,请访问瓦力博客
防盗链是一种机制,也可以说是一种技术.目的就是防止自己网站上的东西(如图片,文件 etc。)被其他用户采用其他的技术手段来访问或者下载。简单来说就是防止自己站点资源被他人盗用
1.盗链
站点在页面呈现的时候拉取非本站的资源,称为盗链
。准确的说,只有某些时候,这种跨站访问资源,才被称为盗链。假设B站点作为一个商业网站,有很多自主版权
的图片,自身展示用于商业目的。而A站点,希望在自己的网站上面也展示这些图片,直接使用:
<img src="http://b.com/photo.jpg"/>
这样,大量的客户端在访问A站点时,实际上消耗了B站点的流量,而A站点却从中达成商业目的。从而不劳而获。这样的A站点着实令B站点不快的。
2.nginx配置防盗链
当浏览器向web服务器发送请求的时候,一般会在头信息中带上Referer
字段,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。基于头信息的
Referer
字段,nginx识别指定的Referer,在客户端请求时,通过匹配referer头域与配置,对于指定放行,对于其他referer视为盗链。
1.valid_referers
valid_referers配置项是属于ngx_http_referer_module
模块传送门{:target="_blank"}
Syntax: valid_referers none | blocked | server_names | string ...;
Default: —
Context: server, location
参数 | 说明 |
---|---|
none | 请求标头中缺少"Referer"字段,也就是空Referer |
blocked | "Referer"字段出现在请求标头中,但其值已被防火墙或代理服务器删除;这些值是不以"http://"或"https://"开头的字符串 |
server_names | 允许某个域名通过如walidrea.com |
arbitrary string | 定义服务器名称和可选的URI前缀。服务器名称的开头或结尾可以包含“*”。在检查期间,“Referer”字段中的服务器端口被忽略 |
regular expression | 第一个符号应为“~”。应该注意的是,表达式将与“http://”或“https://”之后的文本匹配 |
示例配置
location ~ .*\.(jpg|gif|png)$ {
root /opt/app/code/images;
gzip on;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
valid_referers none blocked 116.62.113.218 walidream.com;
if ($invalid_referer) {
return 403;
}
}
允许访问服务器图片
ssl不允许访问服务器图片
ssl因为HTTPReferer头信息是可以通过程序来伪装生成的,所以通过Referer信息防盗链并非100%可靠,但是,它能够限制大部分的盗链
网友评论