default_type用于在types映射失败时指定默认Content-Type,常配于http块;典型值有application/octet-stream(触发下载)、text/plain(纯文本显示)、text/html(慎用);需配合include mime.types生效,不作用于proxy_pass响应。
在 Nginx 中,
指令用于为无法通过
映射明确识别 MIME 类型的响应内容,指定一个默认的
响应头。它位于
、
或
块中,最常见也最合理的配置位置是
块,以统一控制全局行为。
default_type 的作用与典型取值
当 Nginx 无法根据文件扩展名(如
、
)在
块中查到对应 MIME 类型时,就会使用
的值作为响应头中的
。常见配置包括:
—— 表示“未知二进制流”,浏览器通常触发下载(适合 API 返回原始字节、上传服务、或静态资源类型不可控场景)
—— 默认以纯文本呈现(适合调试、日志接口、或确保内容可读但不执行)
—— 少用,易导致非 HTML 内容被错误解析(如 JSON 被当作 HTML 渲染出错)
配合 types 块才能真正生效
不是独立判断类型的机制,它只在
查找失败后兜底。因此必须确保
块已加载(通常由
提供),且未被覆盖或清空。例如:
}
若需扩展支持自定义后缀(如
、
),应在
块中显式添加,而不是依赖
:
处理未知文件流的实用建议
当业务需要将未注册后缀的文件统一视为可下载的原始数据流(如用户上传的任意格式附件),推荐以下组合配置:
保留
,维持常用类型识别能力
设
在
块,保证兜底安全
在具体
中,可进一步限制行为,例如禁用执行、强制下载:
注意:default_type 不影响代理响应类型
如果 Nginx 作为反向代理(
),后端返回的
头会直接透传,
不起作用。此时需用
+
手动覆盖(谨慎使用,可能破坏语义)。
default_typetypesContent-Typehttpserverlocationhttp.jpg.jsontypesdefault_typeContent-Typedefault_type application/octet-stream;default_type text/plain;default_type text/html;default_typetypestypesinclude mime.types;http {
include mime.types;
default_type application/octet-stream;
# 若下面手动定义了空 types,会导致所有请求都走 default_type
# types { } ← 应避免这样写.conf.envtypesdefault_typetypes {
text/plain conf env;
application/json api;
}include mime.types;default_type application/octet-stream;httplocationlocation /uploads/ {
default_type application/octet-stream;
add_header Content-Disposition "attachment";
# 可选:禁止脚本执行和内容嗅探
add_header X-Content-Type-Options nosniff;
}proxy_passContent-Typedefault_typeproxy_hide_header Content-Typeadd_header Content-Type ...