验证nginx防盗链是否生效,需实测合法与非法referer请求:先确认配置已加载(nginx -t + reload),再用curl -i模拟不同referer场景(如合法域名200、盗链域名403),结合access日志和浏览器端交叉验证。

验证生产环境中 Nginx 防盗链是否生效,关键在于模拟合法与非法 Referer 请求,并观察响应行为是否符合预期。不能只看配置写了没,必须实测。
确认防盗链配置已加载并生效
先确保配置已正确写入(通常在 server 或 location 块中),且 Nginx 已重载:
- 执行
nginx -t检查语法; - 执行
systemctl reload nginx或nginx -s reload应用变更; - 查看错误日志(如
/var/log/nginx/error.log)确认无 warning 或 failed 加载模块提示。
使用 curl 模拟不同 Referer 场景
在终端中用 curl -I(仅获取响应头)快速验证,避免下载资源本身:
-
合法请求(应返回 200):
curl -I -e "https://yourdomain.com/" https://yourdomain.com/images/logo.png -
空 Referer(如直接输入 URL):
curl -I -e "" https://yourdomain.com/images/logo.png—— 若配置含none,应允许; -
被屏蔽域名(应返回 403):
curl -I -e "https://baidu.com/" https://yourdomain.com/images/logo.png; -
无 Referer 字段(省略 -e):
curl -I https://yourdomain.com/images/logo.png—— 等效于none,结果同上; -
伪造 Referer 为子域名(若白名单含
*.yourdomain.com):curl -I -e "https://cdn.yourdomain.com/" ...—— 应放行。
检查访问日志中的 Referer 和状态码
打开 Nginx 的 access 日志(如 /var/log/nginx/access.log),访问资源后搜索对应行:
- 确认日志中
"GET /images/xxx.jpg HTTP/1.1"后的字段是否包含真实 Referer 值; - 比对状态码:合法来源应为
200,盗链请求应为403(或你自定义的 302 跳转); - 注意:如果日志格式未显式记录
$http_referer,需先在log_format中添加该变量,例如:log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
浏览器端交叉验证(辅助判断)
新建两个本地 HTML 文件,分别模拟“自家页面”和“盗链页面”:
- 在你自己的站点下建
test-ok.html,内嵌<img src="https://yourdomain.com/images/test.jpg?x-oss-process=image/resize,p_40">→ 应正常显示; - 另建一个本地
test-bad.html(用 file:// 协议或起个简易 http server),同样嵌入该图片链接 → 浏览器因同源策略可能不发 Referer,此时若配置含none或blocked,仍可能放行; - 更可靠方式:用另一台服务器部署一个测试站点(如
http://test-hacker.com),在其页面中引用你的图片,再访问该页面并查看 Network 面板中图片请求的响应状态。











