防盗链是指网站对于其他网站在未经授权的情况下直接引用其资源(如图片、视频、音频等)的行为进行限制或阻止的一种技术手段。
防盗链的目的在于保护原网站的资源不被其他网站盗用,节省带宽和服务器资源,并维护网站内容的权益。
常见的防盗链方法包括基于 HTTP Referer 头信息的验证、URL 签名、IP 地址限制等。
下面将使用 Nginx 来实现防盗链,比如 www.a.com 站点的图片资源,在 www.b.com 站点上面提供其他人访问。
Nginx 的防盗链机制跟头部字段 Referer 有关,该字段描述了当前请求是从哪儿发出的,那么在 Nginx 中就可通过判断是否为本站的资源发起的请求,如果不是则不允许访问。
Referer 是什么?
Referer 字段是 HTTP 请求头中的一个字段,用来标识请求的来源页面的URL。当用户从一个页面点击链接访问另一个页面时,浏览器会在请求头中包含 Referer 字段,告诉服务器用户是从哪个页面跳转过来的。这个字段的作用是帮助网站分析用户行为、统计流量来源、实现防盗链等功能。
Referer 字段的拼写是根据 HTTP 规范中的一个拼写错误而来,正确的拼写应该是 Referrer。但由于历史原因,现在大部分浏览器和服务器都使用 Referer 字段。
在 Nginx 中,valid_referers 是一个指令,用于配置防盗链功能,限制允许访问资源的来源页面。通过 valid_referers 指令,可以定义哪些来源页面是合法的,只有来自这些合法来源页面的请求才能访问被保护的资源。
valid_referers 指令的语法如下:
valid_referers none | blocked | server_names | string ...;
其中各个参数的含义如下:
none: 表示不检查 Referer 字段,即不限制访问来源。
blocked: 表示只允许没有 Referer 字段或者 Referer 字段为空的请求访问。
server_names: 表示只允许来自当前服务器域名的请求访问。
string: 可以是指定的 URL 字符串,表示只允许指定的 URL 作为来源访问。
通过配置 valid_referers 指令,可以有效地防止恶意盗链行为,保护网站资源不被未授权的网站盗用。
下面将利用 Nginx 配置项中的 valid_referers 实现防盗链功能:
# 在 location 中开启防盗链机制 location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css) { # 最后面的值在上线前可配置为允许的域名地址 valid_referers blocked 111.111.111.111; if ($invalid_referer) { # 可以配置成返回一张禁止盗取的图片 # rewrite ^/ http://xx.xx.com/NO.jpg; # 也可直接返回403 return 403; } root /soft/nginx/static_resources; expires 7d; }