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配置防盗链的资料请关注代码网其它相关文章!
发表评论