1. 防盗链的原理
防盗链通过检查 http 请求头中的 referer 字段来判断请求来源:
- 如果请求来源是允许的域名,nginx 会正常返回资源。
- 如果请求来源是未授权的域名(或者没有
referer字段),nginx 会拒绝请求(返回 403 错误)。
常见场景:
- 保护图片、视频等静态资源不被其他网站直接引用。
- 限制文件下载资源只能通过特定页面访问。
2. 配置步骤
(1) 编辑 nginx 配置文件
打开 nginx 配置文件:
vim /usr/local/nginx/conf/nginx.conf
在 server 块中添加以下内容:
location ~* \.(gif|jpg|jpeg|png|bmp|ico)$ {
valid_referers none blocked yourdomain.com *.yourdomain.com;
if ($invalid_referer) {
return 403;
}
}
配置说明:
location ~* \.(gif|jpg|jpeg|png|bmp|ico)$:- 匹配图片文件的扩展名(如
.gif、.jpg等)。 ~*表示正则表达式匹配,并且忽略大小写。
- 匹配图片文件的扩展名(如
valid_referers none blocked yourdomain.com *.yourdomain.com;:
none:允许没有referer字段的请求(如直接输入 url 的访问)。blocked:允许被代理或防火墙隐藏了referer的请求。yourdomain.com:允许来自yourdomain.com的请求。*.yourdomain.com:允许来自yourdomain.com的所有子域名的请求。
if ($invalid_referer):
- 如果请求的来源不符合
valid_referers的规则,则变量$invalid_referer为true。 return 403;:- 返回 http 状态码 403(禁止访问)。
(2) 测试配置文件语法
在保存配置文件后,测试配置是否正确:
nginx -t
预期输出:
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
如果有错误,检查配置文件中的语法问题并修复。
(3) 重启 nginx 服务
重启 nginx 使配置生效:
systemctl restart nginx
3. 创建一个简单的测试图片
即使你的网页没有图片资源,你可以手动添加一个测试图片文件到 nginx 的根目录,方便验证防盗链功能。
步骤
- 创建一个测试图片文件: 在 nginx 的根目录下(通常是
/usr/share/nginx/html/或/var/www/html/),创建一个简单的图片文件:
echo "test image" > /usr/share/nginx/html/test.jpg
- 访问测试图片:
- 在浏览器中输入图片的 url(如
http://yourdomain.com/test.jpg)。 - 确保图片可以被正常访问。
- 在浏览器中输入图片的 url(如
- 从其他来源测试引用:
- 在其他域名的网页中嵌入这个图片:
<img src="http://yourdomain.com/test.jpg" />
- 或者用
curl模拟请求:
curl -e "http://otherdomain.com" http://yourdomain.com/test.jpg //nginx 应该返回 403 错误。 curl -e "http://smqnz.com" 192.168.14.111/123.png //可以访问
如果配置正确,

总结:
通过配置防盗链,可以有效保护网站的静态资源,防止带宽被恶意消耗。在实际应用中,可以根据业务需求调整匹配规则和允许的域名,进一步优化配置。
以上就是nginx配置防盗链保护静态资源的详细教程的详细内容,更多关于nginx配置防盗链的资料请关注代码网其它相关文章!
发表评论