default_type是nginx的兜底content-type指令,当请求文件扩展名未在mime.types或types块中定义时生效;其值决定浏览器如何处理未知资源,推荐设为application/octet-stream以强制下载、避免误解析。

default_type 是 Nginx 中用于兜底响应内容类型的指令,它决定当请求的文件扩展名在所有 types 规则(包括 mime.types)中都未被定义时,Nginx 应该发送什么 Content-Type 响应头。
这个设置非常关键——不配或配错,会导致浏览器无法正确解析资源,比如 .webp 图片被下载而不是显示,.mjs 脚本被拒绝执行,甚至 .json 接口返回乱码或触发下载。
default_type 的作用机制
- Nginx 先查
types块(含include mime.types)里有没有匹配当前后缀的 MIME 映射 - 如果没找到,就用
default_type指定的类型作为Content-Type头值 - 若完全没配置
default_type,Nginx 会使用内置默认值text/plain,但这个行为不可靠,尤其对二进制资源极不安全
正确配置位置和写法
建议统一放在 http 块顶层,确保所有 server 和 location 都能继承:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
# …
}
}
也可以在 server 或 location 块内覆盖,适用于局部策略,例如:
location /logs/ {
alias /var/log/app/;
default_type text/plain; # 让 .log 文件以文本形式打开
}
为什么推荐 application/octet-stream 作兜底?
- 浏览器收到该类型时,会强制触发下载,避免误解析
- 对未识别的新格式(如
.vitepress、.asset、.br、.avif)更安全 - 防止前端资源(如
.mjs、.css)因缺失 MIME 被静默阻断
如果想调试方便,可临时设为 text/plain,但上线环境不建议。
常见错误与验证方式
❌ 忘记
include mime.types:导致内置类型全部失效,全靠default_type❌ 把
default_type放在某个location里却漏了其他 location:部分路径无兜底-
✅ 验证方法:用 curl 查看响应头
curl -I https://yoursite.com/test.unknown # 看是否有 Content-Type: application/octet-stream
-
✅ 修改后务必执行
nginx -t && nginx -s reload











