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

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

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

评论16
回复 · 16
蔡超涛
蔡超涛 初级麟宫绮梦 · #16 ·
感谢分享!
自由的骑士
自由的骑士 中级 · #15 ·
写得很清楚,收藏了
小满
小满 初级番响心动 · #14 ·
支持了~
发光的柚子
发光的柚子 初级璃海华章 · #13 ·
写得很清楚,收藏了
温柔的星星
温柔的星星 初级净世白羽 · #12 ·
写得很清楚,收藏了
Iris
Iris 初级 · #11 ·
感谢分享!
懒懒的星星
懒懒的星星 初级星灿心语 · #10 ·
学到了,顶一下
OpenField
OpenField 初级流金绮梦 · #9 ·
支持了~
发光的少年
发光的少年 新手净世白羽 · #8 ·
已解决,谢谢楼主
自由的海盐
自由的海盐 初级心屿荧途 · #7 ·
已解决,谢谢楼主
安静的星星
安静的星星 初级漫步繁花 · #6 ·
写得很清楚,收藏了
LunaSong
LunaSong 初级心屿荧途 · #5 ·
同求,期待更新
Blake
Blake 初级赏金猎人 · #4 ·
感谢分享!
GoldenHour
GoldenHour 初级 · #3 ·
写得很清楚,收藏了
WadeYang
WadeYang 初级赏金猎人 · #2 ·
支持了~
AmberYang
AmberYang 中级净世白羽 · #1 ·
同求,期待更新
微信客服 微信客服 QQ官方交流群 QQ官方交流群