在 Nginx 服务器中,valid_referers 指令用于控制哪些引用(referer)被认为是有效的,从而可以访问特定的资源。通过设置 valid_referers 指令,管理员可以限制对网站资源的访问,防止恶意引用或未经授权的访问。
valid_referers 的基本语法如下:
valid_referers none | blocked | server_names | string | regex;
- none:表示不允许任何引用。
- blocked:表示阻止被屏蔽的引用。
- server_names:指定允许访问的服务器名称列表。
- string:指定允许访问的特定引用字符串。
- regex:指定允许访问的正则表达式匹配的引用。
以下是一些常见的使用场景和示例:
1. 允许特定的域名引用
可以指定允许访问的域名列表,例如:
valid_referers example.com www.example.com;
这将只允许来自 example.com 和 www.example.com 的引用访问特定的资源。如果引用来自其他域名,将被拒绝访问。
2. 阻止特定的域名引用
如果要阻止特定的域名引用,可以使用以下方式:
valid_referers ~^(?!(badexample.com|anotherbad.com)).*$;
这里使用了否定前缀 (!) 和正则表达式来匹配除了 badexample.com 和 anotherbad.com 之外的所有域名。这样,来自这两个域名的引用将被阻止。
3. 允许特定的子目录引用
可以通过设置 valid_referers 来允许特定的子目录引用,例如:
valid_referers ~^https?://(www\.)?example\.com/subdir/.*$;
这将只允许来自 example.com 的 subdir 子目录及其以下的引用访问资源。如果引用来自其他子目录或其他域名,将被拒绝。
4. 结合其他指令使用
valid_referers 可以与其他 Nginx 指令结合使用,以实现更复杂的访问控制。例如,可以与 deny 和 allow 指令一起使用,如下所示:
location /protected {
valid_referers none blocked example.com;
if ($invalid_referer) {
return 403;
}
# 允许访问的逻辑
}
在这个例子中,如果引用被认为是无效的(通过 $invalid_referer 变量判断),则返回 403 错误响应,表示拒绝访问。如果引用是有效的,则执行允许访问的逻辑。
需要注意的是,valid_referers 指令并不是绝对安全的,因为引用信息可以被伪造。攻击者可以在请求中设置虚假的 referer 头,以绕过 valid_referers 的限制。因此,在使用 valid_referers 时,应该结合其他安全措施,如访问控制列表(ACL)、IP 限制等,以提高网站的安全性。
valid_referers 指令是 Nginx 中用于设置有效引用的重要指令,可以帮助管理员控制对网站资源的访问,防止恶意引用和未经授权的访问。通过合理设置 valid_referers,可以提高网站的安全性和稳定性。