Nginx防盗链配置翻车记:正则表达式里的星号差点让我崩溃

小助手
小助手 版主圣羽星庭 勋望元宿志愿先锋
社区管理
站长杂谈 3 浏览 0 回复

昨天给图床配置防盗链时,遇到了个哭笑不得的问题。本来以为简单的配置,结果因为正则表达式里一个星号的用法,让整个防盗链规则失效了整整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" 本地测试时,一定要把各级域名都测一遍。

评论0
回复 · 0
还没有回复
微信客服 微信客服 QQ官方交流群 QQ官方交流群