HTTPS环境下Nginx防盗链核心仍是valid_referers校验,但必须适配协议切换:白名单需显式包含https://域名或正则匹配https?://,确保CDN回源、反向代理透传Referer,并配合secure_link签名增强关键资源防护。

HTTPS 环境下实现 Nginx 静态资源防盗链,核心仍是校验 Referer,但需额外注意协议切换、混合内容与 Referer 丢失问题。直接复用 HTTP 下的 valid_referers 配置往往失效,必须针对性调整。
HTTPS 场景下 Referer 丢失是常态,不是异常
浏览器出于安全策略,默认在 HTTPS 页面中请求 HTTP 资源时清空 Referer;反之,HTTPS 页面加载 HTTPS 资源时才保留 Referer。若你的站点已全站 HTTPS,但静态资源路径仍写成 http://,或 CDN 回源配置未统一协议,就会导致合法请求也被拦截。
- 检查前端 HTML 中所有
<img src="...">、<link href="...">、<script src="...">的 URL 协议——必须全部为 https:// 或协议相对路径(//example.com/static/logo.png) - 确认 CDN(如 Cloudflare、阿里云 CDN)回源协议设为 HTTPS,且不主动改写或剥离 Referer 头
- 若使用了反向代理(如前端 Nginx → 后端 Node.js),确保 proxy_set_header Referer $http_referer; 透传原始头,避免中间层覆盖
valid_referers 白名单必须包含 HTTPS 域名
Referer 字符串完整包含协议和域名,例如 https://www.example.com/page.html。因此白名单不能只写 example.com,否则匹配失败。
- 正确写法:
valid_referers none blocked https://example.com https://www.example.com https://cdn.example.com; - 支持通配:
*.example.com可匹配https://assets.example.com,但不匹配http://example.com - 若允许本站所有子域及主域(含 www 和非 www),推荐:
valid_referers none blocked ~^https?://(www\.)?example\.com$ ~^https?://cdn\.example\.com$;(正则兼顾 HTTP/HTTPS)
规避 Referer 不可靠性的增强手段
Referer 易伪造,HTTPS 下虽更难篡改,但仍非可信凭证。对关键资源(如会员图片、下载包),应叠加签名机制:
- 启用
secure_link模块:URL 带?md5=xxx&expires=1717027200,Nginx 校验签名是否由 secret_key + URI + 过期时间生成 - 签名逻辑必须服务端生成,且 URI 不带查询参数(
/images/photo.jpg,而非/images/photo.jpg?x=1) - 搭配
secure_link_md5和secure_link_expires指令,在 location 中统一校验,失败直接返回 403
调试与验证要点
配置后务必实测,避免“看起来生效,实际拦错”:
- 用 curl 模拟真实请求:
curl -H "Referer: https://www.example.com/" https://example.com/static/test.jpg应返回 200;curl -H "Referer: https://bad-site.com/" ...应返回 403 - 打开浏览器开发者工具 → Network 标签,查看资源请求的 Request Headers 中 Referer 是否存在、是否符合预期
- 检查 Nginx error.log:若出现
open() "/path/to/file" failed (2: No such file or directory),大概率是 root/alias 未与防盗链 location 同级,导致文件找不到


















