实现防盗链

实现防盗链

1. 盗链是什么?

此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容。 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。

2. 实现防盗链/防盗链

要实现防盗链,我们就必须先理解盗链的实现原理,提到防盗链的实现原理就不得不从HTTP协议说起,在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件。换句话说,通过referer,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。有了referer跟踪来源,就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面。
referer就是之前的那个网站域名,正常的referer信息有以下几种

none:请求报文首部没有referer首部,比如用户直接在浏览器输入域名访问web网站,就没有referer信息。
blocked:请求报文有referer首部,但无有效值,比如为空。
server_names:referer首部中包含本主机名及即nginx 监听的server_name。
arbitrary_string:自定义指定字符串,但可使用*作通配符。
regular expression:被指定的正则表达式模式匹配到的字符串,要使用~开头,例如: ~.*\.daming\.com。
  • 基于访问安全考虑,nginx支持通ungx_http_referer_module模块检查访问请求的referer信息是否有效实现防盗链功能
  • 参看官方文档https://nginx.org/en/docs/http/ngx_http_referer_module.html#valid_referers
[root@s2 ~]# vim /apps/nginx/conf/conf.d/pc.conf
location  /images {
 root /data/nginx/html/pc;
 index index.html;
 valid_referers none blocked server_names
    *.example.com example.* www.example.org/galleries/
    ~\.google\.;
    
  if ($invalid_referer) {
  return 403;
 }

# 定义防盗链
location ^~ /images {
 root /data/nginx;
 index index.html;
 valid_referers none blocked server_names *.magedu.com www.magedu.* 
api.online.test/v1/hostlist  ~\.google\. ~\.baidu\.;  #定义有效的referer
  if ($invalid_referer) {  #假如是使用其他的无效的referer访问:
  return 403; #返回状态码403
 }
}
#重启Nginx并访问测试
发布了39 篇原创文章 · 获赞 2 · 访问量 1018

猜你喜欢

转载自blog.csdn.net/weixin_45341507/article/details/103938547