Nginx valid_referers 防盗链配置 自定义拦截图及多场景适配

AI 概述
本文讲解Nginx借助`valid_referers`实现图片防盗链的方法。可配置Referer白名单拦截非法请求,支持返回自定义提示图,也能添加信任域名、设置例外资源。修改配置需校验语法并平滑重启,同时给出缓存、HTTPS适配建议,高安全场景可改用安全链接模块加强防护。
目录
文章目录隐藏
  1. 1. 基础防盗链配置
  2. 2. 进阶:自定义提示图片
  3. 3. 多场景适配与例外处理
  4. 4. 配置验证与测试
  5. 补充建议
  6. 结语

Nginx valid_referers 防盗链配置 自定义拦截图及多场景适配

图片盗链会挤占服务器带宽、增加运营成本,借助 Nginx 可高效实现防护。目前业内最常用、可控性最强的方案,就是利用valid_referers指令校验请求Referer头部。本文从基础配置、自定义拦截提示图、特殊场景适配、配置测试等维度,详细讲解 Nginx 图片防盗链的完整部署方案与实用最佳实践。

1. 基础防盗链配置

建议通过正则表达式精准匹配图片后缀(如 .jpg.png 等),避免对 HTML 或 API 接口等无需校验的请求进行误伤。

location ~* \.(jpg|jpeg|png|gif|webp)$ {
    # 定义合法的 Referer 白名单
    # none: 允许用户在浏览器地址栏直接输入 URL 访问
    # blocked: 允许被隐私插件或代理服务器隐藏了 Referer 的请求
    # server_names: 允许当前 server_name 配置的域名访问
    # *.yourdomain.com: 允许所有子域名访问
    valid_referers none blocked server_names *.yourdomain.com;
    # 如果 Referer 不在白名单内,则返回 403 禁止访问
    if ($invalid_referer) {
        return 403;
    }
}

2. 进阶:自定义提示图片

如果你希望在拦截盗链时返回一张自定义的“禁止访问”提示图,而不是生硬的 403 错误,可以使用 rewrite 或 error_page 指令:

location ~* \.(jpg|jpeg|png|gif|webp)$ {
    valid_referers none blocked server_names *.yourdomain.com;
    if ($invalid_referer) {
        # 方式一:使用 rewrite 重写到提示图(需加 break 避免循环)
        rewrite ^(.*)$ /images/forbidden.png break;
        # 方式二:使用 error_page(推荐,语义更清晰)
        # error_page 403 =200 /images/forbidden.png;
        # return 403;
    }
}

关键注意:确保提示图(如 /images/forbidden.png)本身不在上述防盗链的 location 规则内,否则会导致死循环匹配。

3. 多场景适配与例外处理

  • 允许多个信任域名:如果有合作站点需要引用你的图片,直接在 valid_referers 后追加信任域名即可,例如:valid_referers none blocked *.yourdomain.com *.partner.com;
  • 允许特定图片被公开引用:如果某张 Logo 需要允许任何网站引用,可以单独为其配置一个精确匹配的 location,并添加跨域头,使其绕过防盗链规则:

4. 配置验证与测试

修改配置后,务必先检查语法并平滑重启 Nginx:

# 检查配置语法
nginx -t
# 平滑重启
nginx -s reload

测试方法

  • 直接访问:在浏览器地址栏直接输入图片 URL,若配置了 none 则应正常显示。
  • 模拟盗链:使用 curl 命令模拟非法来源的请求,验证是否被成功拦截:

补充建议

  • 性能优化:建议配合 expires 7d; 等缓存指令使用,减少重复的防盗链校验开销。
  • HTTPS 站点适配:HTTPS 站点的 Referer 字段有时默认不携带协议和端口,建议在白名单中使用正则同时兼容 http 和 https,例如:~^https?://(www\.)?yourdomain\.com
  • 高级防护:基于 Referer 的防盗链容易被伪造。如果对安全性要求极高,建议编译启用 Nginx 的 http_secure_link_module 模块,通过签名链接和过期时间来防止专业盗链。

结语

基于 Referer 的 Nginx 防盗链配置简单易用,可满足多数常规防护需求,搭配缓存规则还能优化服务性能。需注意规避规则死循环、适配 HTTPS 场景等问题。若面对高强度恶意盗链,可升级使用安全链接模块强化防护,结合实际场景选择方案,就能有效守护图片资源。

以上关于Nginx valid_referers 防盗链配置 自定义拦截图及多场景适配的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

12

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » Nginx valid_referers 防盗链配置 自定义拦截图及多场景适配

发表回复