Nginx 防盗链需将静态资源路径剥离 proxy_pass,由本地服务并实施 Referer、secure_link 签名、IP 三重校验;后端不暴露静态路径,所有静态请求均由 Nginx 的 location 拦截处理。

不能直接在 proxy_pass 块里做传统防盗链——因为 proxy_pass 转发的是动态请求,而防盗链本质是拦截对静态资源的**直连访问**。要保护后端静态资源,核心思路是:把静态资源路径从代理逻辑中剥离,改由 Nginx 本地服务,并在此处叠加 Referer + IP + 安全令牌三重校验。
明确静态资源归属,避免走 proxy_pass
关键前提是:不把 /images/、/static/、/uploads/ 这类路径交给 proxy_pass 转发。否则 Nginx 只是“传话”,无权检查 Referer 或验证签名。
- 后端应用(如 Node.js/Java)应只提供 API 和 HTML 页面,**不暴露静态文件 URL 路径**
- 所有静态资源统一由 Nginx 通过
alias或root指向本地磁盘目录服务 - 例如,后端返回的 HTML 中图片 src 是
/static/logo.png,Nginx 必须用 location 拦截该路径,而不是转发给后端
在静态 location 中配置 Referer 白名单
针对静态资源路径单独设置 valid_referers,允许合法来源,拒绝非法盗链请求:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
-
valid_referers none blocked yourdomain.com *.yourdomain.com;—— 允许直接输入地址、被代理屏蔽 Referer、以及你自己的域名和子域 - 搭配
if ($invalid_referer) { return 403; }立即拦截 - 注意:
none对应空 Referer(如用户直接浏览器地址栏访问),blocked对应 Referer 被防火墙或浏览器插件清空的情况
高敏感资源强制使用 secure_link 签名 URL
仅靠 Referer 易伪造,对商品图、会员文档等关键资源,必须启用 secure_link 模块生成有时效、带哈希的 URL:
- 后端生成链接时,用密钥 + 过期时间 + 路径计算签名,如
/images/products/123.jpg?st=abc123&e=1730480000 - Nginx 配置中启用校验:
secure_link $arg_st,$arg_e; secure_link_md5 "secret_key$uri$arg_e"; - 校验失败自动返回 403,无需后端参与
IP 黑白名单作为补充防线
在静态资源 location 内嵌入 IP 控制,快速封禁已知恶意出口 IP 或限制访问来源范围:
-
deny 192.168.100.55;或deny 203.0.113.0/24; -
allow 10.0.20.0/24; allow 127.0.0.1; deny all;—— 白名单优先,最后拒绝全部 - IP 规则在 Referer 判断前执行,效率更高
真正安全的静态资源防护,不是靠 proxy_pass 加 header,而是让 Nginx 成为唯一入口,把资源路径收归本地管理,再叠加三层校验。这样既不增加后端负担,又能精准阻断盗链行为。

















