当前位置: 首页 > news >正文

ngx_http_referer_module 模块概述

一、使用场景

  • 防盗链
    仅允许本站或特定域名的页面直接引用图片、视频等资源,拒绝第三方网站直接嵌入。
  • 流量控制
    阻止来自社交媒体、搜索引擎或未知来源的大量自动化抓取。
  • 安全审计
    简易记录并过滤可疑 Referer,以减少非法请求。

注意

  • Referer 头可被伪造或在部分隐私/安全插件中被屏蔽(置空或删除)。
  • 浏览器也可能因隐私设置或 HTTPS→HTTP 跨协议请求而不发送 Referer

二、示例配置

http {server {listen 80;server_name www.example.com example.com;# 定义合法 Referer 列表:#  none           —— 允许无 Referer#  blocked        —— 允许被防火墙/代理剥离的 Referer#  server_names   —— 允许包含本 server_name 的 Referer#  *.example.com  —— 允许子域名#  example.*      —— 允许任意 top‐level 后缀#  /images/       —— 可加 URI 路径前缀#  ~\.google\.    —— 正则匹配 “google.” 字样valid_referers none blocked server_names*.example.com example.* www.example.com/images/~*\.google\.;# 若 Referer 不在上述列表,则标记为 invalidif ($invalid_referer) {# 防盗链示例:返回 403,或重定向到站内图片return 403;# 或# rewrite ^/images/(.*)$ /images/nohotlink.png last;}location /images/ {root /var/www/html;}}
}

三、指令详解

1. referer_hash_bucket_size

Syntax:   referer_hash_bucket_size size;
Default:  64;
Context:  server, location
  • 设置存储 Referer 哈希表的桶大小(以字节为单位),应与 CPU 缓存行大小对齐以提升查找效率。
  • 一般无需调整,除非出现哈希冲突警告。

2. referer_hash_max_size

Syntax:   referer_hash_max_size size;
Default:  2048;
Context:  server, location
  • 设置哈希表中可能存储的最大条目数。
  • 若合法 Referer 条目非常多(数百以上),可适当增大。

3. valid_referers

Syntax:   valid_referers none | blocked | server_names | string ...;
Default:  —;
Context:  server, location
  • none:允许请求头中没有 Referer 字段。

  • blocked:允许头部中存在但被防火墙或代理剥离(即不以 http:///https:// 开头)的情况。

  • server_names:允许 Referer 中包含当前 server_name 列表的任一名称。

  • 字符串或通配

    • 精确匹配域名或带路径前缀(如 www.example.com/images/)。
    • 通配符 * 仅可用于前缀或后缀(如 *.example.comexample.*)。
  • 正则表达式:以 ~(区分大小写)或 ~*(不区分大小写)开头,匹配 http:///https:// 之后的 URI 部分。

匹配顺序:

  1. 精确字符串
  2. 最长前缀通配
  3. 最长后缀通配
  4. 正则表达式(配置文件中出现的顺序)
  5. default(若未指定 default,则视为不匹配)

四、内置变量

变量含义
$invalid_referer匹配合法 Referer 时为空字符串;否则为 "1"(真值)

可结合 if ($invalid_referer)mapgeo 等指令做更复杂的访问控制。

五、常见示例

1. 防盗链:只允许本站域名加载图片

valid_referers none blocked server_names *.example.com;location ~* \.(gif|jpg|jpeg|png)$ {if ($invalid_referer) {return 403;}expires 30d;
}

2. 允许搜索引擎过来抓取

valid_referers none blocked server_names~*google\.  ~*bing\.  ~*yahoo\.;

通过 ngx_http_referer_module,可以在 Nginx 层面实现简易的来源过滤与防盗链,为静态资源及页面访问增加一层来源验证。

相关文章:

  • HTTPS的工作过程
  • 2025/5/18
  • 卷积神经网络进阶:转置卷积与棋盘效应详解
  • esp32课设记录(二)lcd屏显示文字与照片
  • 雷军直面小米危机:SU7 事故余波未平,玄戒 O1 力挽狂澜
  • 水平可见直线--上凸包(andrew算法
  • 【藏经阁】加密机服务完整解决方案,包含客户端+服务端
  • AI:OpenAI论坛分享—《AI重塑未来:技术、经济与战略》
  • 【方法论】如何构建金字塔框架
  • 实操分享java应用容器化,使用docker作为容器工具
  • Cursor:简单三步提高生成效率
  • 想要建站但没有服务器?雨云RCA,免服务器即可搭建完整网站!!!
  • 目标检测新突破:用MSBlock打造更强YOLOv8
  • 基于 STM32 的全自动洗车监控系统设计与实现
  • 我的电赛(简易的波形发生器大一暑假回顾)
  • 学习黑客HTTP 请求头
  • MyBatis-Plus 的 updateById 方法不更新 null 值属性的问题
  • 第三十六节:特征检测与描述-特征匹配
  • 2025年PMP 学习二十 第13章 项目相关方管理
  • 【QGIS二次开发】地图编辑-06
  • 澎湃思想周报|《混沌少年时》与青少年社媒禁令;自雇陷阱
  • 消费维权周报丨上周涉汽车类投诉较多,涉加油“跳枪”等问题
  • 十大券商看后市|A股指数有望进一步缓步推高,淡化短期波动
  • 人民日报头版:紧盯“学查改”,推动作风建设走深走实
  • 蒲慕明院士:好的科普应以“质疑、讨论公众关切的科学问题”为切入点
  • 特写|银耳种植“北移”到沧州盐山,村民入伙可年增收4万元