前端把 w 和 h 当字符串拼进地址,部分请求返回 500,日志里是 invalid image geometry 和 NaNx600。日志里能对上时间点,这种反而好排。
服务端直接拿查询参数做除法,没有转成整数,空值和非数字都会算出 NaN。图像库收到 NaN 尺寸就抛异常。这一点先确认清楚,后面就不用反复试。
w=$(echo "$1" | tr -cd '0-9')
[ -z "$w" ] && w=800
convert in.jpg -resize "${w}x" out.jpg
「裁剪参数类型」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
处理上按这个顺序:入口处把宽高强转整数,非法值回落到默认档位;给尺寸加上下限和上限,超出范围直接拒绝;补一条带非法参数的回归用例,防止再次漏掉。
结果对不对很好判断,传 w=abc 时接口返回 400 和明确提示,不再出现 500。
