Nginx可以通过valid_referers模块实现防盗链功能。防盗链是一种黑客技术,通过隐藏真实的HTTP Referer字段值来盗取网站资源。valid_referers模块允许我们验证Referer字段,拒绝不在许可列表中的请求,以防止资源被盗链。
valid_referers语法:
valid_referers none | server_names | string …;
- none:允许任何referer
- server_names:允许自己网站的referer,使用该网站的server_name配置
- string:指定允许的referer内容
配置示例:
location ~* \.(gif|jpg|png)$ {
valid_referers none blocked www.example.com; # 允许example.com的referer
if ($invalid_referer) {
return 403;
}
}
上例匹配gif、jpg、png资源,并开启valid_referers验证。 none表示允许空referer,blocked拒绝所有referer。所以该location只允许www.example.com域名的referer,其他referer请求返回403错误。
防盗链的工作原理:
- 客户端发送请求,请求头包含Referer字段,标识请求来源页面的URL。
- Nginx接收到请求,如果location开启valid_referers模块,会检查Referer字段。
- 如果Referer字段的值在valid_referers列表中,请求正常响应。
- 如果Referer字段的值不在列表中或为空,变量$invalid_referer值为1,执行if块内重定向或返回错误页面。
- 所以通过验证Referer来源,可以有效阻止盗链请求,保护网站资源安全。