防盗链基于客户端携带的referer实现。referer是记录从哪个页面跳转过来的标记信息,如果别人只链接了自己网站图片或某个单独的资源,而不是打开了网站的整个页面,就是盗链。referer就是之前的那个网站域名,正常的referer信息有以下几种:
- none请求报文首部没有referer首部,比如用户直接在浏览器输入域名访问web网站,就没有referer信息。
- blocked请求报文有referer首部,但无有效值,比如为空。
- server_namesreferer首部中包含本主机名及即nginx 监听的server_name。
- arbitrary_string自定义指定字符串,但可使用*作通配符。
- regular expression被指定的正则表达式模式匹配到的字符串,要使用~开头。
实现防盗链
定义有效的referer,其他无效的返回403。
server {
index index.html;
valid_referers none blocked server_names
~\.google\. ~\.baidu\. ~\.bing\. ~\.so\.;
if ($invalid_referer) {
return 403 "Forbidden Access";
}
}