下载的 mp4 在 Windows 上显示成文本文件图标,双击用记事本打开,响应头 Content-Type 是 text/plain,同一文件在另一台服务器上正常。乍看像缓存或者权限的锅,追下去往往不是。

types {
    video/mp4 mp4 m4v;
    application/pdf pdf;
}

追下去是这么回事:Nginx 的 mime.types 没包含 mp4,default_type 又设成了 text/plain,所有未知扩展名都按文本返回。浏览器按响应头决定打开方式。

「MIME 类型映射」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

具体做法是,在 mime.types 里补上 mp4 对应 video/mp4;确认 http 块里 include 了 mime.types,别被局部 default_type 覆盖;用 curl -I 查看响应头,确认类型正确。

验收就看一点,响应头返回 video/mp4,下载后系统识别为视频文件。

作者 9823189