浏览器报下载失败,服务日志却看不出异常时,先别急着改业务代码。文件下载跨过了应用、容器文件系统和 Web 服务器三层,任一层的路径理解不一致,都会把一个普通链接变成 404、403 或空文件。
先确认文件到底在哪一层
进入运行中的容器,按接口实际返回的相对路径拼出完整路径,再检查文件是否存在、大小是否正常、运行用户是否可读。宿主机有文件并不等于容器里有文件;绑定挂载的源路径、目标路径和启动用户必须同时正确。
再看应用如何生成下载地址
把“磁盘路径”和“对外 URL”分开配置。磁盘路径只给应用读写,URL 只给浏览器访问。尤其是上传目录换过位置、环境变量覆盖过配置文件时,最容易出现写入成功、读取却指向旧目录的情况。
最后沿着反向代理走一遍
用 curl 分别请求应用端口和公网域名。如果应用端口正常、域名异常,重点看 Nginx 的 location、alias/root 语义、尾部斜杠和静态文件权限。不要只根据前端报错猜原因,三次请求能很快把问题缩到一层。
给以后留一条可复现的线索
记录下载接口、返回 URL、容器内绝对路径、挂载声明和代理规则。发布前用一份真实小文件做冒烟验证,比上线后临时翻 compose 文件可靠得多。
正文完




