Nginx防盗链

1
2
3
4
5
6
7
8
9
location ~ .*\.(bmp|gif|ico|jpeg|jpg|png|webp|svg)$ {
    ...
    valid_referers none blocked server_names 
        *.bahuangshanren.tech www.bing.com ~\.google\.;
    if ($invalid_referer) {
    	return 444;
    }
    ...
}

$invalid_referer可跟参数:

  • none: 请求头中缺少“Referer”字段。

  • blocked: “Referer”字段出现在请求头中, 但其值已被防火墙或代理服务器删除; 这些值是不以“http://”或“https://”开头的字符串。

  • server_names: 服务器名称“Referer”请求头字段包含一个服务器名称。

  • 任意字符串

    定义服务器名称和可选的URI前缀。服务器名称的开头或结尾可以有“*”。在检查过程中, “Referer”字段中的服务器端口被忽略。

  • 正则表达式

    第一个符号应该是“~”。应该注意的是, 表达式将与“http://”或“https://”之后开始的文本匹配。

除了本文这种基于http_referer判定非法请求的方式, 还有一种计算MD5的判定, 不过比较麻烦所以暂且不表。