如何配置Nginx使其返回的Content-Type与请求文件扩展名一致
Nginx自动按文件扩展名匹配Content-Type配置方案
基础通用配置(覆盖99%使用场景)
Nginx官方发行版默认自带mime.types文件,已经预定义了几乎所有常用文件扩展名对应的标准MIME类型,包含css(对应text/css)、js、图片、音视频、文档等全品类常用格式,不需要你手动逐个新增扩展名配置,只要在Nginx配置中启用该映射规则即可:
- 编辑你的Nginx主配置文件(通常是
/etc/nginx/nginx.conf),在http块中添加以下两行配置:
http { # 引入预定义的扩展名-MIME映射表 include mime.types; # 未匹配到扩展名的文件默认返回二进制流类型,避免被错误识别为text/plain default_type application/octet-stream; # 其余原有配置保持不变 server { # 你的站点原有配置 } }
- 验证配置正确性后重载Nginx生效:
nginx -t && nginx -s reload
你当前请求css返回text/plain的问题,大概率是配置中遗漏了include mime.types;这一行,添加后即可恢复正常。
特殊场景:自定义扩展名批量匹配
如果你有大量非通用的自定义业务扩展名,不想逐个往mime.types中添加,可以用map指令通过正则批量配置映射规则:
http { include mime.types; default_type application/octet-stream; # 自定义扩展名映射规则 map $uri $custom_content_type { # 批量匹配同一类MIME的多个自定义扩展名 ~* \.(mycss|customcss)$ text/css; ~* \.(myjs|customjs)$ application/javascript; ~* \.(myext1|myext2|myext3)$ application/octet-stream; default $sent_http_content_type; } server { listen 80; root /your/file/service/path; location / { add_header Content-Type $custom_content_type; } } }
注意:不推荐直接把扩展名拼接为Content-Type返回(比如
.abc返回application/abc),这种格式不符合MIME标准,可能导致浏览器解析异常。
内容的提问来源于stack exchange,提问作者Shay Mualem
相关产品推荐
相关产品推荐

