nginx 日志出现乱码,通常是字符编码不一致或终端/采集工具解码方式不对导致的。下面按常见原因和处理办法说明。
不同位置原因不同:
cat access.log
# 显示乱码
✅ 解决:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
或临时:
LANG=zh_CN.UTF-8 tail -f access.log
例如中文 URL、中文参数。
✅ 解决思路:
如果你知道是 GBK:
iconv -f gbk -t utf-8 access.log
$request / $args 中文nginx 默认:
$request_uri:原始字节(可能是 GBK)$uri:nginx 解码后的(UTF-8)✅ 推荐写法:
log_format main '$remote_addr - $time_local "$uri" '
'$status $body_bytes_sent "$http_referer"';
避免直接用:
"$request_uri"
日志中记录了响应内容或 header。
✅ 解决:
例如:
✅ Filebeat 示例:
processors:
- decode:
utf8:
fields: ["message"]
✅ Logstash:
codec => plain { charset => "UTF-8" }
可能是:
✅ 检查:
file access.log
hexdump -C access.log | head
log_format json escape=json '{'
'"time":"$time_local",'
'"ip":"$remote_addr",'
'"uri":"$uri",'
'"status":$status'
'}';
✅ 优点:
escape=json 防止非法字符echo $LANG 是否为 UTF-8file xxx.log$request_uri如果你愿意,可以把:
发给我,我可以直接帮你定位是哪一层的问题。