Nginx示例:利用 valid_referers 实现防盗链

本文将介绍如何通过 nginx 的 valid_referers 实现防盗链功能。

什么是防盗链?

防盗链是指网站对于其他网站在未经授权的情况下直接引用其资源(如图片、视频、音频等)的行为进行限制或阻止的一种技术手段。

防盗链的目的在于保护原网站的资源不被其他网站盗用,节省带宽和服务器资源,并维护网站内容的权益。

常见的防盗链方法包括基于 HTTP Referer 头信息的验证、URL 签名、IP 地址限制等。

Nginx 示例

下面将使用 Nginx 来实现防盗链,比如 www.a.com 站点的图片资源,在 www.b.com 站点上面提供其他人访问。

Nginx 的防盗链机制跟头部字段 Referer 有关,该字段描述了当前请求是从哪儿发出的,那么在 Nginx 中就可通过判断是否为本站的资源发起的请求,如果不是则不允许访问。

Referer 是什么?

Referer 字段是 HTTP 请求头中的一个字段,用来标识请求的来源页面的URL。当用户从一个页面点击链接访问另一个页面时,浏览器会在请求头中包含 Referer 字段,告诉服务器用户是从哪个页面跳转过来的。这个字段的作用是帮助网站分析用户行为、统计流量来源、实现防盗链等功能。

Referer 字段的拼写是根据 HTTP 规范中的一个拼写错误而来,正确的拼写应该是 Referrer。但由于历史原因,现在大部分浏览器和服务器都使用 Referer 字段。

valid_referers 指令

在 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;
}
尺有所短;寸有所长。物有所不足;智有所不明。——屈原《卜居》
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号