Nginx 默认不自动设置Content-Type中的charset,需在http/server/location块中配置charset utf-8和charset_types指定MIME类型,确保响应头正确携带charset=utf-8,且文件本身须为UTF-8无BOM编码。
源码安装 Nginx 本身不内置字符集处理逻辑,它默认不强制设置响应的 Content-Type 中的 charset,也不自动转码请求体。所谓“支持多语言字符集默认编码”,实际是指让 Nginx 在返回 HTML、CSS、JS 等文本响应时,主动声明合适的字符集(如 UTF-8),并确保后端应用或静态文件本身确实是该编码——Nginx 只负责透传或添加头信息,不参与编码转换。
最直接有效的方式是在 http、server 或 location 块中使用 charset 指令:
charset utf-8;:对匹配到的响应,自动在 Content-Type 头中追加 ; charset=utf-8(仅对 MIME 类型为 text/ 开头的响应生效)charset_types text/html text/css text/javascript application/javascript text/plain;:可扩展支持添加 charset 的 MIME 类型(默认已包含常见文本类型)charset off;
Nginx 不做内容重编码。如果 HTML 文件保存为 GBK 或 ISO-8859-1,即使响应头写了 charset=utf-8,浏览器也会乱码:
file -i filename.html 查看编码;用 iconv -f gbk -t utf-8 input.html > output.html 转换<meta charset="UTF-8"> 作为双重保障如果 Nginx 前置了 PHP、Python 或 Node.js 应用,注意:
Content-Type: text/html; charset=gb2312,此时 Nginx 的 charset 指令不会覆盖——HTTP 头以先写入者为准more_set_headers "Content-Type: text/html; charset=utf-8";(需加载 headers-more-nginx-module)charset 自动补全上述功能是 Nginx 核心自带行为,不需要在 ./configure 阶段启用特定模块(如 --with-http_charset_module 已自包含于标准构建中,无需手动指定)。