上传时能看到临时预览,保存商品后图片变成 404,说明临时文件上传没问题,故障多半发生在从 media/tmp/catalog/product 移到正式目录或生成缓存图的阶段。
对着404地址检查原图和缓存图
假设页面请求:
/media/catalog/product/cache/.../a/b/abc.jpg先找原图:
find pub/media/catalog/product -path '*a/b/abc.jpg' -ls原图不存在,就看保存商品时的 exception.log,以及 PHP-FPM 用户是否能写 pub/media/catalog/product。原图存在而 cache 路径没有,则测试:
php bin/magento catalog:images:resize权限要按运行用户修,不要chmod 777
确认 CLI 用户、PHP-FPM 用户和部署用户的组关系,再设置目录组写权限与 setgid。例如实际用户组为 www-data 时:
chgrp -R www-data pub/media
find pub/media -type d -exec chmod 2775 {} +
find pub/media -type f -exec chmod 664 {} +命令里的用户组必须按服务器实际情况调整。还要确认 ImageMagick/GD 可用,以及 Nginx 的 /media/ 规则没有把不存在的缓存图直接永久缓存成 404。
最后重新保存同一商品,确认原图已移动、resize 命令无异常、前台缩略图 200。只清浏览器缓存而没检查文件落盘,不算修好。

