在 nginx 中,日志时间本身不是“随便改”的,而是由 nginx 在写日志时自动生成的时间戳。不过根据你的真实需求,常见有下面几种情况,我可以按场景给你说明做法。
log_format main '$remote_addr - $remote_user [$time_local] "$request"'
[$time_local] 输出类似:
[12/Nov/2025:10:21:33 +0800]
log_format main
'$remote_addr - $remote_user [$time_iso8601] "$request"';
输出示例:
2025-11-12T10:21:33+08:00
✅ 常用于日志收集(ELK、Prometheus、Loki)
log_format main '$remote_addr [$time_iso8601] "$request"';
或配合 map 提取部分时间(高级用法)
nginx 直接使用系统时区
date
timedatectl set-timezone Asia/Shanghai
然后:
systemctl restart nginx
✅ nginx 日志时间会立刻生效
docker run -e TZ=Asia/Shanghai ...
或
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
❌ nginx 不支持人工指定日志时间
# 不支持
access_log /var/log/nginx/access.log time=2024-01-01;
❌ 不能通过变量把时间“写死”
常见需求与建议:
| 需求 | 正确做法 |
|---|---|
| 日志时间是错的 | 修改系统时区 |
| 历史日志迁移 | 保持原时间戳,只改文件名 |
| 测试日志 | 改系统时间(不推荐生产) |
| 日志分析 | 用 $time_iso8601 |
⚠️ 生产环境 不要随便改系统时间
# 查看当前 nginx 使用的时区
date
# 查看 nginx 错误日志时间
tail -f /var/log/nginx/error.log
# 确认 nginx 是否真的重启
ps -ef | grep nginx
你可以直接说:
我可以给你 精确到配置文件的修改方案。