Nginx 日志异常是一个比较宽泛的问题,可能涉及日志不记录、记录异常、格式错乱、过大、时间不对、权限问题等。下面我按常见原因 + 排查思路给你一个系统性的说明,你可以对照看看属于哪一类。
现象
常见原因
access_log 或 error_log 未配置access_log off; 关闭排查
nginx -T | grep access_log
nginx -T | grep error_log
确认:
http {
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log warn;
}
现象
Permission denied原因
排查
ps aux | grep nginx # 看 worker 用户
ls -ld /var/log/nginx
修复
chown -R nginx:nginx /var/log/nginx
chmod 755 /var/log/nginx
现象
$request 为空原因
log_format 写错示例正确格式
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log main;
现象
原因
/etc/localtime排查
date
timedatectl
修复
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
Docker:
-v /etc/localtime:/etc/localtime:ro
现象
原因
解决
logrotatetruncate -s 0 /var/log/nginx/access.log
现象
解决
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
日志中:
log_format main '$http_x_forwarded_for - $remote_user [$time_local] "$request"';
原因
return 444;deny / limit_req 拦截if 条件跳过排查
error_log /var/log/nginx/error.log debug;
# 1. 检查配置
nginx -t
# 2. 查看完整配置
nginx -T | grep log
# 3. 查看 nginx 用户
ps aux | grep nginx
# 4. 查看磁盘
df -h
# 5. 查看日志权限
ls -l /var/log/nginx
你可以直接贴出:
我可以帮你精确判断是哪一类异常,并给出最小修改方案。