Nginx 日志出现乱码,通常不是 Nginx 本身的 bug,而是字符编码不一致或数据来源编码不对导致的。下面按常见原因给你梳理一下。
Nginx 默认按字节记录日志,不会做编码转换。
中文 → %E4%B8%AD%E6%96%87✅ 解决思路:
Nginx 不会把 GBK 转成 UTF-8。
例如:
log_format main '$request';
如果 $request 里包含 GBK 编码的中文,日志就是乱码。
✅ 解决办法(常用):
request_uri(已编码)这是最容易被误判的情况。
就会看到乱码
✅ 验证方法:
file access.log
看是否是:
UTF-8 Unicode text
如:
User-AgentReferer某些客户端会发送非 UTF-8 字符。
✅ 解决:
如果:
也可能乱码。
✅ 建议:
proxy_set_header Accept-Encoding "";
并确保后端输出 UTF-8
你可以对照一下:
log_format json escape=json '{'
'"time":"$time_local",'
'"request":"$request_uri",'
'"addr":"$remote_addr"'
'}';
escape=json 能避免很多编码显示问题。
如果你愿意,可以把一段乱码日志贴出来,我可以直接帮你判断是 GBK / UTF-8 / 终端问题 哪一种。