LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

Nginx referer 模块,筑起防盗链高墙,告别流量盗刷

admin
2025年10月24日 22:18 本文热度 18

使用 referer 模块实现网站资源防盗链

在某网站通过 URL 引用其他网站的静态资源,动态资源,当用户在浏览器中浏览或点击请求 URL 时,会在请求头部中带上 Referer 字段,用以标识当前请求是从哪个页面链接过来的。若不加以限制,则容易被盗刷流量,增加服务器资源消耗,所以我们需要一个拒绝非正常的网站访问我们站点资源的策略,即防盗链。

在 Nginx 中,可通过 referer 模块来实现网站资源防盗链,其原理是使用 invalid_referers 变量根据配置判断 referer 值是否合法,若不合法则返回 403 状态码;值得注意的是 referer 模块已默认编译进 Nginx 中,可通过 --without-http_referer_module 参数禁用。

特别注意:在实际使用中,还需注意 Referer 字段可以被客户端伪造,所以还需结合其他安全措施一起使用,例如 IP 地址白名单、签名验证,或者下一章节讲解的 secure_link 模块等。

温馨提示:若文章代码块中存在乱码,请通过文末的阅读原文链接,在知识星球中阅读,或者直接访问原文链接:https://articles.zsxq.com/id_rx229kjix356.html

模块指令

# 指定“Referer”请求标头字段值,这些值将导致嵌入的 $invalid_referer 变量设置为空字符串。
Syntax:  valid_referers none | blocked | server_names | string ...;
Default:  —
Context:  server, location
# 参数说明:
none: 请求报头中缺少 “Referer” 字段;
blocked: 请求报头中的 “Referer” 字段被防火墙或代理服务器替换,此类值是不以 "http://" 或 "https://" 开头的字符串;
server_names: 请求报头中的 “Referer” 字段与服务器名称匹配,支持通配符以及正则表达式匹配;

# 设置有效的referers哈希表设置存储桶大小
Syntax:  referer_hash_bucket_size size;
Default:  referer_hash_bucket_size 64;
Context:  server, location

# 设置有效引用者哈希表的最大大小
Syntax:  referer_hash_max_size size;
Default:  referer_hash_max_size 2048;
Context:  server, location


示例演示

例如,只允许来自 www.weiyigeek.top 及 blog.weiyigeek.top/test 路径 和其wygk.eu.org子域名请求访问资源,缺少 referer 头或者其他来源的请求将被拒绝。

location /referer {
  valid_referers server_names www.weiyigeek.top blog.weiyigeek.top/test *.wygk.eu.org;
  if ($invalid_referer) {
    return 403;
  }

  return 200 'valid referers, http_referer: $http_referer';
}

使用 curl 命令测试不同 Referer 头请求的结果:

# 缺少 referer 头,返回 403 状态码
curl http://test.weiyigeek.top/referer

# 存在 referer 头,但是不以 "http://" 或 "https://" 开头的字符串,返回 403 状态码
curl -H "Referer: www.weiyigeek.top" http://test.weiyigeek.top/referer

# 有效 referer 头,返回 200 状态码
curl -H "Referer: http://www.weiyigeek.top" http://test.weiyigeek.top/referer

# 存在 referer 头,但不是来自指定域名路径的请求,返回 403 状态码
curl -H "Referer: http://blog.weiyigeek.top/01test" http://test.weiyigeek.top/referer

# 特别注意:由于是字符串匹配,所以此处路径/test01与/test 由于前缀是匹配的,返回 200 状态码
curl -H "Referer: http://blog.weiyigeek.top/test01" http://test.weiyigeek.top/referer

# 存在 referer 头,任意 wygk.eu.org 子域名路径的请求,都将返回 200 状态码
curl -H "Referer: http://t1.wygk.eu.org" http://test.weiyigeek.top/referer
curl -H "Referer: http://t2.wygk.eu.org" http://test.weiyigeek.top/referer

参考文档:https://nginx.org/en/docs/http/ngx_http_referer_module.html


阅读原文:原文链接


该文章在 2025/10/29 18:56:59 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved