开启 Referer 防盗链后,从 www 域名打开的页面图片全是 403,换成裸域访问又正常,手机和桌面表现一致。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

curl -sI -e 'https://www.example.com/post/1' https://cdn.example.com/a.jpg
curl -sI -e 'https://example.com/post/1' https://cdn.example.com/a.jpg

白名单里只填了 example.com,没有把 www.example.com 一起写进去,边缘做主机名比对时认为来源不同。子域名和测试域名也会被同样拦掉。这一点先确认清楚,后面就不用反复试。

「防盗链裸域」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

具体做法是,把 www、m 和测试子域逐个加进白名单,别用通配符一把放开;确认白名单匹配的是完整主机名,不是字符串包含;用 curl 带不同 Referer 各请求一次,确认只有站内域名返回 200。

改完照着核一遍,两个站内域名请求图片都返回 200,外站 Referer 仍被拦住。

作者 9823189