Nginx 日志时间不对,一般不是 Nginx 本身“算错”了,而是系统时区 / 时间不对,或者你看日志的方式有误解。下面按常见情况一步步排查。
Nginx 默认访问日志时间是 UTC 时间(ISO 格式),例如:
10.0.0.1 - - [01/Jan/2026:08:30:00 +0000] "GET / HTTP/1.1"
其中 +0000 表示 UTC。
如果你在中国(东八区),实际时间应该是 +0800。
✅ 这是正常现象,不是 bug。
date
如果显示类似:
Wed Jan 1 00:30:00 UTC 2026
说明服务器是 UTC 时区。
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
再执行:
date
应该变成:
Wed Jan 1 08:30:00 CST 2026
⚠️ 改完时区后,重启 Nginx 才会生效
nginx -s reload
# 或
systemctl restart nginx
即使系统时区改了,Nginx 日志还是 UTC?
一般是因为:
docker exec -it nginx date
如果还是 UTC:
docker run -e TZ=Asia/Shanghai ...
或挂载:
-v /etc/localtime:/etc/localtime:ro
Nginx 不支持在日志里直接指定时区,只能依赖系统时间。
但你可以:
log_format + $time_local示例:
log_format main '$remote_addr - $remote_user [$time_local] "$request"';
如果时间整体不对(比如慢 8 小时或更离谱):
timedatectl
同步时间:
ntpdate pool.ntp.org
# 或
systemctl restart chronyd
date 显示正确时区如果你愿意,可以把:
date 输出发出来,我可以直接帮你判断是哪一种情况。