Nginx如何设置图片防盗链

在 Nginx 中设置图片防盗链,最常用且最可控的方式是通过 valid_referers 指令精准校验请求的 Referer 头。以下是具体的配置步骤与最佳实践:

1. 基础防盗链配置

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

nginx 复制代码
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 错误,可以使用 rewriteerror_page 指令:

nginx 复制代码
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:

bash 复制代码
# 检查配置语法
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 模块,通过签名链接和过期时间来防止专业盗链。
相关推荐
兵慌码乱6 天前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
坏孩子的诺亚方舟12 天前
FPGA系统架构设计实践15_高云Arora V系列时钟体系
fpga开发·系统架构
桥田智能12 天前
桥田智能 QT-650S:面向白车身焊装的 800kg 重载快换解决方案
开发语言·qt·系统架构
生成论实验室12 天前
机器人:一个自主运动的系统
人工智能·算法·语言模型·机器人·自动驾驶·agi·安全架构
@insist12312 天前
系统架构设计师-5G 技术、冗余设计与分层架构
5g·架构·系统架构·软考·系统架构设计师·软件水平考试
生成论实验室12 天前
自动驾驶:一个自主运动的系统
人工智能·算法·机器学习·语言模型·机器人·自动驾驶·安全架构
X7x512 天前
深度拆解网络安全“闭环”之王——APPDRR模型
网络安全·网络攻击模型·安全威胁分析·安全架构·appdrr模型
X7x512 天前
一文讲透PADIMEE模型
网络安全·网络攻击模型·安全威胁分析·安全架构·padimee模型
@insist12313 天前
系统架构设计师-网络存储 RAID 与 IPv6 协议全解析
网络·系统架构
山东点狮信息科技有限公司13 天前
企业级 MES 制造执行系统架构设计与实践
spring cloud·性能优化·系统架构·策略模式·点狮