根本原因是配置文件未保存为无bom的utf-8编码;需用file -i或vim :set fileencoding?确认编码,再在vim中执行:set nobomb、:set fileencoding=utf-8、:wq保存,或在vs code等编辑器中选“utf-8无bom”格式,并避免在log_format等处直接写中文。

Linux 下 Nginx 配置文件本身若含中文(如注释、路径、错误页内容),出现乱码,根本原因是配置文件保存时用了非 UTF-8 编码(常见为 GBK 或含 BOM 的 UTF-8),而 Nginx 默认以 UTF-8 解析配置,导致读取失败或解析异常。
确认配置文件真实编码
用 file -i nginx.conf 或 enca -L zh nginx.conf 查看编码;更直观可用 vim nginx.conf 后输入 :set fileencoding? 查当前编码。若显示 fileencoding=gb2312 或含 bom,即为问题源头。
重存为无 BOM 的 UTF-8
在 Vim 中执行以下命令:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- :set nobomb(移除 BOM)
- :set fileencoding=utf-8
- :wq(保存退出)
若使用 VS Code、Notepad++ 等编辑器,务必选择“UTF-8 无 BOM”格式保存,禁用“自动检测编码”功能。
避免中文出现在关键配置位置
Nginx 对配置文件中非指令部分(如注释、error_page 的文字内容)的编码容错较低。建议:
- 注释尽量用英文,或确保编辑器全程 UTF-8 无 BOM 保存
- error_page 指令中若返回自定义 HTML,应将中文内容移入独立的 .html 文件,并在该文件
中明确声明<meta charset="utf-8"> - 不要在
log_format的字符串模板里直接写中文提示(如"访问中文页面"),改用英文标识符 + 日志采集端统一映射
验证与 reload
保存后执行 nginx -t —— 若提示 “invalid UTF-8 sequence” 或类似错误,说明仍有非法字节;成功通过后运行 nginx -s reload 生效。可临时在配置中加一条带中文的 return 200 "测试成功"; 并 curl 测试响应体是否正常显示,快速闭环验证。










