Nginx防盗链配置翻车记:正则表达式里的星号差点让我崩溃
昨天给图床配置防盗链时,遇到了个哭笑不得的问题。本来以为简单的配置,结果因为正则表达式里一个星号的用法,让整个防盗链规则失效了整整3小时。
错误写法:
location ~* \.(jpg|png|gif)$ {
valid_referers *.example.com;
if ($invalid_referer) {
return 403;
}
}
这样配置后,来自test.example.com的请求居然也被403了!
正确姿势应该是:
location ~* \.(jpg|png|gif)$ {
valid_referers .example.com;
if ($invalid_referer) {
return 403;
}
}
看到区别了吗?valid_referers里不能直接用星号做通配,要用点号开头表示子域名。
更坑的是这个错误配置在测试环境居然能通过,因为测试时用的都是二级域名请求,到了生产环境才发现主站请求也被拦截。建议用curl -e "http://test.example.com" 本地测试时,一定要把各级域名都测一遍。
最新打赏


QQ官方交流群