Nginx 日志出现乱码,通常不是 Nginx 本身坏了,而是字符编码或终端显示的问题。下面按最常见原因给你系统排查一下。
这是最常见情况。
现象
tail -f access.log 或 cat 显示乱码?? 或方块原因
C 或 GBK排查
locale
如果看到:
LANG=C
LC_ALL=
说明不是 UTF‑8。
解决
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
永久生效(Linux):
echo "export LANG=en_US.UTF-8" >> ~/.bashrc
echo "export LC_ALL=en_US.UTF-8" >> ~/.bashrc
例如:
/%E4%B8%AD%E6%96%87
这是正常的,不是乱码,只是 URL 编码。
解决
python3 -c "import urllib.parse; print(urllib.parse.unquote('%E4%B8%AD%E6%96%87'))"
例如:
现象
$request_body 或 $args说明
Nginx 不会自动转码,它只是原样记录字节流。
✅ 这是正常现象,不是 Nginx 的 bug。
例如:
建议
$request_body检查
file access.log
如果显示:
ISO-8859 text
说明文件编码不对。
解决
iconv -f gbk -t utf-8 access.log > access_utf8.log
如果是:
✅ 通常是 BOM / 编码识别错误
解决
你可以按顺序检查:
locale 是否是 UTF‑8file access.log 编码你可以直接贴出:
log_format我可以精准告诉你是哪一类乱码,以及是否需要处理。