什么是nginx
什么是Referer
Referer 首部包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用 Referer 首部识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等。
通俗来说,假如我通过Google搜索去搜索referer
,然后搜索引擎给出了一堆链接,这个时候,我点击链接,那么http头就会带上referer字段信息,并且值就是Google搜索的url地址https://www.google.com
;因此,假设从A网址到B网址,那么这个referer字段就告诉B网址该请求是从A网址发起的。
nginx实现防盗链的原理
既然http头部会带有referer字段,因此,就可以从这个字段入手,我们只需要确认我们的referer白名单,就可以成功的实现防盗链功能,因此,就需要拦截你所想拦截的请求,然后,去读取每一个请求的referer字段信息,如果存在空值或者referer字段的值不在白名单中,就可以返回相应的http状态码(404,403d等等)
具体配置代码
摘抄自nginx中文文档
1 | location ~* \.(gif|jpg|png|swf|flv)$ { |
valid_referers
就是所有请求通过拦截后根据referer白名单对比的结果none blocked
就是指后面的域名、ip就是referer白名单的值*.nginxcn.com
就是referer白名单
缺点
referer可伪造
像Java的httpclient,可以伪造一个referer去实现一个资源请求,然后顺利的下载资源,因此,通过referer所实现的防盗链接面对这样的操作,就是摆设。