Nginx 日志出现乱码,通常不是 Nginx 本身“写错了”,而是字符编码不一致或终端/查看工具编码不对导致的。下面按常见原因和处理方式说明。
cat / less 看乱码cat access.log
如果直接乱码,可能是:
file access.log
或
enca access.log
例如:
在 Nginx 配置中统一字符集:
server {
charset utf-8;
}
或在 http 段:
http {
charset utf-8;
}
$request、$args 等这些字段可能包含原始字节流,Nginx 不会自动转码。
$requestlog_format main '$remote_addr - $time_local - $request_uri';
而不是:
$request
$args
检查:
echo $LANG
应为:
zh_CN.UTF-8
如果不是:
export LANG=zh_CN.UTF-8
chcp 65001
如果你用:
可能二次损坏。
lesstail -f如果日志已经是乱码并保存,原始编码信息已丢失。
如果是 GBK:
iconv -f gbk -t utf-8 access.log > access_utf8.log
如果是 ISO-8859-1:
iconv -f iso-8859-1 -t utf-8 access.log
http {
charset utf-8;
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request_method $request_uri $server_protocol" '
'$status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log main;
}
Nginx 日志乱码 = 编码不一致 统一用 UTF-8 + 不乱记原始请求 + 终端 UTF-8
如果你愿意,可以把乱码样例或 nginx.conf 日志配置贴出来,我可以直接帮你改。