1. 防盗链的概念
防盗链,顾名思义就是防止盗取链接,这里的链接一般是资源链接。
如图所示,我们访问一个网站时(比如百度),我们第一个请求会获得一个html页面,页面中包含各种资源链接(比如图片),浏览器会解析这些资源链接,再通过http请求获取这些链接。此时,假设这个网站中没有相对应的资源信息,完全可以链接别的网站的资源,这种无授权访问特定网站资源的情况就叫做盗链,防盗链就是指防止这种非法盗用资源的技术
2. 基本配置
nginx中的防盗链配置在location中,关键字valid_referers,格式为
valid_referers none | blocked | server_names | string...
其中none表示允许referer值不存在,
blocked表示存在referer值,但是被防火墙或者代理服务器删除,其值不以http://或者https://开头
server_names以及string表示匹配的referer值,支持正则表达式
比如如下配置
valid_referers 192.168.66.129;
if ($invalid_referer) {
return 403;
}
该配置表示nginx会校验请求头部的referer字段,只有该字段的值是192.168.66.129才能访问资源,否则会返回403
3. 简单例子
我们准备两台服务器,一台是nginx服务器(192.168.66.129),另一台是资源服务器(192.168.66.1),我们进行如下配置,限制referer值只能为192.168.66.129
此时,我们从外部访问nginx,会返回403,因为我们的referer值为空,不是192.168.66.129
若是我们配置成valid_referers none 192.168.66.129;,允许空值,则可以正常访问